次のファイルがあります。
File1:
json ABC
optype D
json XYZ
json IJK
--DELETE OP_TYPE
json IJK
上記のどこにもパターンoptypeがある場合は、DELETEで始まる行のコメントを削除したいと思います。
希望の出力:
json ABC
optype D
json XYZ
json IJK
DELETE OP_TYPE
json IJK
ファイルに上記のモードoptypeがない場合、変更は必要ありません。
File2:
json ABC
json XYZ
json IJK
--DELETE OP_TYPE
json IJK
希望の出力:
json ABC
json XYZ
json IJK
--DELETE OP_TYPE
json IJK
またはを通じてawk
これを達成する方法は何ですかsed
?
ベストアンサー1
そしてsed
:
sed '/optype/,$ s/^--\(DELETE\)/\1/'
正規表現にs
一致する最初の行(つまり、含む)から最後の行()まで、すべての行で代替コマンドを実行します。optype
optype
$
同様の行が存在する場合、その行--DELETE optype
は範囲の始まりと見なされ、コメントアウトされません。
同等perl
:
perl -pe 's/^--(?=DELETE)// if /optype/..0'
またはawk
:
awk '/optype/, 0 {sub("^--DELETE", "DELETE")}; {print}'