大きなファイル(2000行以上)があります。パターンを見つけたら、上の2行、下の1行の先頭に#を入れる必要があります。また、パターンが見つかった行の先頭に#を挿入してください。環境はRed Hat Linuxです。また、説明もしていただければいいと思います。
たとえば、次のテキストを参照して「Fail」を検索し、その文字列の前の2行目とその後の1行目(行の先頭)を検索します。また、#行には「Fail」という文字列が含まれています。
Name
Number
Reason = Pass
Reasult
Name
Number
Reason = Pass
Reasult
Name
Number
Reason = Fail
Reasult
Name
Number
Reason = Pass
Reasult
Name
Number
Reason = Fail
Reasult
Name
Number
Reason = Pass
Reasult
ベストアンサー1
以下を使用することをお勧めしますperl
。
perl -p0e 's/(.*\n)(.*\n)(.*Fail\n)/#\1#\2#\3#/g' file
仕組みは次のとおりです。
-p
:すべての入力ラインにわたって印刷プログラムを繰り返します。-0
: レコード区切り文字として null を仮定します。-e
:コマンドラインからプログラムを実行するs/x/y/g
: ファイルのどこでも x を y に置き換えます。()
: 正規表現を一緒に結合.*
:改行文字を除くすべての文字が0回以上繰り返されます。\n
: 新しいチーム\1
、、\2
:\3
n番目のグループのアクセスモード()
出力:
Name
Number
Reason = Pass
Reasult
Name
Number
Reason = Pass
Reasult
#Name
#Number
#Reason = Fail
#Reasult
Name
Number
Reason = Pass
Reasult
#Name
#Number
#Reason = Fail
#Reasult
Name
Number
Reason = Pass
Reasult