ファイルの改行、印刷、削除

ファイルの改行、印刷、削除

私は以下を行うためにsedを使用しています。

  • 一致パターン(例:で始まる行#
  • 代替一致(例:#開始文字を空の文字に置き換え/削除)
  • stdoutで印刷する(例:使用しているように結果の置き換えをstdoutで印刷するなど-i
  • #一致を削除する(例:行の先頭に文字を含む行全体を削除するなど)

これはファイルで実行されるため、フラグと一緒に使用すると、以下を使用しない限り、sedstdoutに出力されません。-iいたずら:

sed -i -e 's/^\(#\)/\1/w /dev/stdout' -e '/^#/d' test

名前付きファイルには、test次のサンプルコンテンツが含まれています。

#this
#is
a
test

上記はすべてに適用されます。とは別に#交換...ここに交換を実装することがあります(標準出力に印刷する前に文字を削除しようとしています)。

sed -i -e 's/^\(#\)//w /dev/stdout' -e '/^#/d' test

これは、行全体を印刷するのではなく削除することを除いて、\1上記と似ています。//#

問題は最後がうまくいかないことです。削除行の代わりに交換して印刷します。最初の方法は、置換を除くすべての操作で機能します(たとえば、#行の先頭の記号を削除するなど)。

これがうまくいかないのはなぜですか(2番目の試み、最初の試みはうまくいきますが文字を削除しないことを除いて#

ベストアンサー1

最初の式は、s/^\(#\)//w /dev/stdout2番目の式と一致する可能性があるすべての項目を削除します。/^#/d

代わりに使用できます

sed -i -e '/^#/{s///w /dev/stdout' -e 'd}' test

前任者。

$ cat test
#this
#is
a
test

$ sed -i -e '/^#/{s///w /dev/stdout' -e 'd}' test
this
is

$ cat test
a
test

おすすめ記事