79

次のテストファイルがあります

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: `/'

これを達成する方法はありますか?

4

9 に答える 9

108

#複数の sを持つ行がないと仮定すると、これは機能します。

sed -e '/BBB/ s/^#*/#/' -i file

注: 行ごとに最大 1 つの置換を行うため、/g は必要ありません。

于 2013-08-01T15:59:57.210 に答える
4

BBB が行の先頭にあると仮定すると、さらに単純な式を使用することになりました。

sed -e '/^BBB/s/^/#/' -i file

未来の私のためにもう一つメモ。をお見逃しなく-i。これは機能しないため: sed -e "..." same_file > same_file.

于 2020-04-16T23:09:31.793 に答える
1

実際には、感嘆符 (!) は必要ありません。キャレット記号は角括弧内にあるものをすべて否定し、検索からすべてのハッシュ記号を無視するからです。この例は私のために働いた:

sed -i '/[^#]/ s/\(^.*BBB.*$\)/#\ \1/' file

于 2018-03-12T20:27:58.927 に答える
0

通常、元のコピーに変更を加える前に、ファイルをバックアップするために次のように指定しますsed-i.bak

sed -i.bak '/BBB/ s/^#*/#/' file

このようにすると、両方がfileあり、自信を持ってfile.bakから削除することができます。file.bak

于 2020-09-16T21:49:38.240 に答える