構成ファイルでブロック(複数行)をコメントアウトする方法を見つけようとしています。最初の行と一致させ、それ以降のすべての行でも操作を実行したいと思います。
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/^/#/
これは範囲内の行でのみ機能し、コメントアウトします。