ファイル内の文字列の最後の2つの項目を見つけた後、最初のn(たとえば3つ)行をコピーする方法はありますか?最後の発生以降にのみ関心があった場合は、次のものを使用しました。
grep -A4 'stringhere' filein.txt | tail -n 3 >> fileout.txt
ただし、文字列の最後の2つの項目に対して操作を実行するためにこのコマンドを再構築する方法はわかりません。
つまり、以下を含む入力ファイルの場合:
Text 1
Text 2
Text 3
Text 4
STRINGIMLOOKINGFOR
Text 5
Text 6
Text 7
Text 8
Text 9
STRINGIMLOOKINGFOR
Text 10
Text 11
Text 12
Text 13
Text 14
STRINGIMLOOKINGFOR
Text 15
Text 16
Text 17
Text 18
Text 19
私は出力(n = 3)が次のようになります:
Text 10
Text 11
Text 12
Text 15
Text 16
Text 17
ベストアンサー1
GNU grepを使用してください:
s="STRINGIMLOOKINGFOR"
grep -Poz "$s"'.*(\n.*){3}' file | grep -v "$s" | tail -n 6
テキスト10 テキスト11 テキスト12 テキスト15 テキスト16 テキスト17