sed はパターンと一致し、x 行の後に実行されます。

sed はパターンと一致し、x 行の後に実行されます。

構成ファイルでブロック(複数行)をコメントアウトする方法を見つけようとしています。最初の行と一致させ、それ以降のすべての行でも操作を実行したいと思います。

sed '/\/Some\/Foo\/Bar\/String/' config.file

次の例の「コード」は、私が一致させようとし、コメントアウトしたものです。ブロックは常に}で終わりますが、パターンマッチング後の行もわかっているので、パターン行+ 6になります。

foo { '/Some/Foo/Bar/String' :
    key1 => value1,
    key2 => value2,
    key3 => value3,
    key4 => value4,
    key5 => value5,
}

sed コマンド後の結果

#foo { '/Some/Foo/Bar/String' :
#    key1 => value1,
#    key2 => value2,
#    key3 => value3,
#    key4 => value4,
#    key5 => value5,
#}

答え1

sed行範囲を定義してから、その範囲内でのみ置換を適用できます。含まれている行で始まりSome/Foo/Bar/String、含まれる行で終わる範囲を定義してから、}置換コマンドを適用してその行をコメントアウトできます。

$ sed '\|/Some/Foo/Bar/String|,/}/ s/^/#/' file
#foo { '/Some/Foo/Bar/String' :
#    key1 => value1,
#    key2 => value2,
#    key3 => value3,
#    key4 => value4,
#    key5 => value5,
#}

詳細

  • \|/Some/Foo/Bar/String|, /}/

    これは範囲を定義します。/\/Some\/Foo\/Bar\/String/, /}/ただし、バックスラッシュを避けるために、最初の正規表現を区切り文字として使用するかの|ように書くことができます。/

  • s/^/#/

    これは範囲内の行でのみ機能し、コメントアウトします。

関連情報