GNUを使用してsed
、行全体をパターンと一致させたい場合、これは機能します。
sed -n '/^dog 123 4335$/ { :a; n; p; ba; }' infile
同等の標準:
sed -ne '/^dog 123 4335$/{:a' -e 'n;p;ba' -e '}' infile
次の入力(infile
)で:
cat 13123 23424
deer 2131 213132
bear 2313 21313
dog 123 4335
cat 13123 23424
deer 2131 213132
bear 2313 21313
出力は次のとおりです。
cat 13123 23424
deer 2131 213132
bear 2313 21313
説明:
/^dog 123 4335$/
目的のパターンを検索します。
:a; n; p; ba;
は、入力から新しい行をフェッチし(n
)、それを印刷し(p
)、ラベルaに戻るループです:a; ...; ba;
。
更新
あなたのニーズに近い答えがあります。つまり、file2のパターン、file1からgreppingです。
tail -n +$(( 1 + $(grep -m1 -n -f file2 file1 | cut -d: -f1) )) file1
埋め込まれたgrepとcutは、file2からパターンを含む最初の行を見つけます。この行番号に1を加えたものが末尾に渡され、プラス1がパターンのある行をスキップします。
最初の一致ではなく最後の一致から開始する場合は、次のようになります。
tail -n +$(( 1 + $(grep -n -f file2 file1 | tail -n1 | cut -d: -f1) )) file1
tailのすべてのバージョンがプラス表記をサポートしているわけではないことに注意してください。