ファイルに次の行があります
foo
bar
xxx
yyy
zzz
xxx、yyy、zzz 行をコメントアウトする必要があります。だから私は走る次のコマンド:
sed -e '/xxx/ s/^#*/#/' -i file
sed -e '/yyy/ s/^#*/#/' -i file
sed -e '/zzz/ s/^#*/#/' -i file
出る
foo
bar
#xxx
#yyy
#zzz
ループでこれを行うにはどうすればよいですか?
ありがとう
PD:このコマンド行番号を知ると役に立ちますが、違うかもしれないのでよくわかりません。
sed -e '2s/^/#/' -e '5s/^/#/' -e '7s/^/#/' file
PD:各行が正規表現なので、EOFも使用できません。
答え1
次のサンプルデータを使用してくださいfile
。
foo
bar
xxx
yyy
zzz
foo
bar
#xxx
#yyy
#zzz
sed
以下を含む-E
拡張正規表現を使用してください。
$ sed -E 's/^(xxx|yyy|zzz)$/#&/' file
foo
bar
#xxx
#yyy
#zzz
foo
bar
#xxx
#yyy
#zzz
そしてawk
:
$ awk '/^(xxx|yyy|zzz)$/ { $0 = "#" $0 }; 1' file
foo
bar
#xxx
#yyy
#zzz
foo
bar
#xxx
#yyy
#zzz
使用標準sed
:
$ sed -e '/^xxx$/bc' -e '/^yyy$/bc' -e '/^zzz$/bc' -e b -e ':c' -e 's/./#&/' file
foo
bar
#xxx
#yyy
#zzz
foo
bar
#xxx
#yyy
#zzz
答え2
次のテキスト例が与えられたとき:
foo
bar
xxx
yyy
zzz
foo
bar
#xxx
#yyy
#zzz
次のコマンドを使用できます。
$ sed 's/^\(xxx\|yyy\|zzz\)$/#\1/' file
foo
bar
#xxx
#yyy
#zzz
foo
bar
#xxx
#yyy
#zzz
^[^#]*
で始まらない行を解析します#
。\(xxx\|yyy\|zzz\)
検索xxx
またはキャプチャし、パターンを交換してyyy
キャプチャします。zzz
#
#\1