パターンを見つけて、前の2行、後の1行の先頭に#を挿入します。

パターンを見つけて、前の2行、後の1行の先頭に#を挿入します。

大きなファイル(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\3n番目のグループのアクセスモード()

出力:

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

おすすめ記事