次のテストファイルがあります
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 は必要ありません。
BBB が行の先頭にあると仮定すると、さらに単純な式を使用することになりました。
sed -e '/^BBB/s/^/#/' -i file
未来の私のためにもう一つメモ。をお見逃しなく-i
。これは機能しないため: sed -e "..." same_file > same_file
.
実際には、感嘆符 (!) は必要ありません。キャレット記号は角括弧内にあるものをすべて否定し、検索からすべてのハッシュ記号を無視するからです。この例は私のために働いた:
sed -i '/[^#]/ s/\(^.*BBB.*$\)/#\ \1/' file
通常、元のコピーに変更を加える前に、ファイルをバックアップするために次のように指定しますsed
。-i.bak
sed -i.bak '/BBB/ s/^#*/#/' file
このようにすると、両方がfile
あり、自信を持ってfile.bak
から削除することができます。file.bak