異なる行のパターン発生に基づいて行のコメントを削除します。

異なる行のパターン発生に基づいて行のコメントを削除します。

次のファイルがあります。

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一致する最初の行(つまり、含む)から最後の行()まで、すべての行で代替コマンドを実行します。optypeoptype$

同様の行が存在する場合、その行--DELETE optypeは範囲の始まりと見なされ、コメントアウトされません。

同等perl

perl -pe 's/^--(?=DELETE)// if /optype/..0'

またはawk:

awk '/optype/, 0 {sub("^--DELETE", "DELETE")}; {print}'

おすすめ記事