私は次のテストファイルを持っています
AAA
BBB
CCC
次のsedを使用して、[〜#〜] bbb [〜#〜]行をコメント化できます。
# sed -e '/BBB/s/^/#/g' -i file
行の先頭にまだ#がない場合にのみ、コメントアウトしたいと思います。
# sed -e '/^#/! /BBB/s/^/#/g' file
sed: -e expression #1, char 7: unknown command: `/'
これを達成する方法はありますか?
複数の#
sを含む行がない場合、これは機能します。
sed -e '/BBB/ s/^#*/#/' -i file
注:行ごとに最大1つの置換を行うため、/ gは必要ありません。
このソリューションが最適に機能すると思います。
sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\ \1/' file
「#」記号の数は問題ではありません。別の記号を追加することはありません。検索するパターンに「#」が含まれていない場合、行の先頭に追加され、末尾のスペースも追加されます。
末尾のスペースが必要ない場合
sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\1/' file
パターンスペースの一致部分全体を参照する&
特殊文字を使用した別のソリューション。これは、正規表現グループをキャプチャして参照するよりも少し単純/クリーンです。
sed -i 's/^[^#]*BBB/#&/' file
sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\ \1/' file
キーワード*.Sudo
ではコメントが機能しません。コメントはありません...
以下の構文のみが機能します:sed -e '/Sudo/ s/^#*/#/' file
実際には、キャレット記号は角かっこ内にあるものをすべて無効にし、検索からのすべてのハッシュ記号を無視するため、感嘆符(!)は必要ありません。この例は私のために働いた:
sed -i '/[^#]/ s/\(^.*BBB.*$\)/#\ \1/' file