複数のsedコマンドを正しく接続する方法

複数のsedコマンドを正しく接続する方法

#@や#@@などで表されるテキストブロックから一部の情報を抽出しようとしています。サンプルファイルで以下のコマンドを使用すると機能しますが、-eで接続しようとすると期待どおりに機能しません。

現在のコマンド(理想的ではない)

sed -n "/^#@/,/#@@/p" file | sed 's/[#@]*//'

再設計されたコマンド(動作しない)

sed -en "/^#@/,/#@@/p" -e 's/[#@]*//' file

希望の出力

text title
text line
text line

ファイル形式

#
#
#@ text title
#  text line
#  text line
#@@
#

私は何が間違っていましたか?

答え1

注文する

sed -en "/^#@/,/#@@/p" -e 's/[#@]*//' file

ファイル-enに式を適用しようとするとエラーが発生する可能性があります。他のオプションと組み合わせるには、次のように式パラメータをlikeの後に置くか、完全に分離する必要があります。n/^#@/,/#@@/p-e-e-ne "/^#@/,/#@@/p"-n -e "/^#@/,/#@@/p"

ところで、代替コマンドを適用したいようです。指定された行でそしてそれから実際には、式であるものを印刷してください。

$ sed -n '/^#@/,/#@@/s/^#@*//p' file
 text title
  text line
  text line

先行スペースを削除するには:

$ sed -n '/^#@/,/#@@/s/^#[@ ]*//p' file
text title
text line
text line

関連情報