1. ホーム
  2. regex

sed - 特定の文字列にマッチする行をコメントアウトする AND それはまだコメントアウトされていない

2023-07-25 23:58:25

質問

次のようなテストファイルがあります。

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

どうすればこれを実現できるのか、何かアイデアはありますか?

どのように解決するのですか?

複数の # のある行がないと仮定すると、これはうまくいくでしょう。

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

注意:1行にせいぜい1つの置換しかしないので、/gは必要ありません。