Dengan asumsi Anda ingin mencocokkan keseluruhan garis dengan pola Anda, dengan GNU sed
, ini berfungsi:
sed -n '/^dog 123 4335$/ { :a; n; p; ba; }' infile
Setara standar:
sed -ne '/^dog 123 4335$/{:a' -e 'n;p;ba' -e '}' infile
Dengan input berikut ( infile
):
cat 13123 23424
deer 2131 213132
bear 2313 21313
dog 123 4335
cat 13123 23424
deer 2131 213132
bear 2313 21313
Outputnya adalah:
cat 13123 23424
deer 2131 213132
bear 2313 21313
Penjelasan:
/^dog 123 4335$/
mencari pola yang diinginkan.
:a; n; p; ba;
adalah loop yang mengambil baris baru dari input ( n
), mencetaknya ( p
), dan bercabang kembali ke label a :a; ...; ba;
.
Memperbarui
Inilah jawaban yang mendekati kebutuhan Anda, yaitu pola di file2, yang diambil dari file1:
tail -n +$(( 1 + $(grep -m1 -n -f file2 file1 | cut -d: -f1) )) file1
Grep dan cut yang disematkan menemukan baris pertama yang berisi pola dari file2, nomor baris ini ditambah satu diteruskan ke ekor, plus satu ada di sana untuk melewati garis dengan pola.
Jika Anda ingin memulai dari pertandingan terakhir alih-alih pertandingan pertama adalah:
tail -n +$(( 1 + $(grep -n -f file2 file1 | tail -n1 | cut -d: -f1) )) file1
Perhatikan bahwa tidak semua versi ekor mendukung notasi plus.