Tüm çizgiyi modelinizle eşleştirmek istediğinizi varsayarsak, GNU ile sed
, bu işe yarar:
sed -n '/^dog 123 4335$/ { :a; n; p; ba; }' infile
Standart eşdeğer:
sed -ne '/^dog 123 4335$/{:a' -e 'n;p;ba' -e '}' infile
Aşağıdaki girişle ( infile
):
cat 13123 23424
deer 2131 213132
bear 2313 21313
dog 123 4335
cat 13123 23424
deer 2131 213132
bear 2313 21313
Çıktı:
cat 13123 23424
deer 2131 213132
bear 2313 21313
Açıklama:
/^dog 123 4335$/
istenen deseni arar.
:a; n; p; ba;
input ( n
) ' dan yeni bir satır alan , onu ( p
) basan ve a etiketine geri dallayan bir döngüdür :a; ...; ba;
.
Güncelleme
İhtiyaçlarınıza daha yakın bir cevap, yani file2'deki pattern, file1'den grepping:
tail -n +$(( 1 + $(grep -m1 -n -f file2 file1 | cut -d: -f1) )) file1
Gömülü grep ve kesim, file2'den bir desen içeren ilk satırı bulur, bu satır numarası artı biri kuyruğa geçirilir, artı biri desen ile çizgiyi atlamak için orada bulunur.
İlk karşılaşma yerine son karşılaşmadan başlamak istiyorsanız, şu şekilde olur:
tail -n +$(( 1 + $(grep -n -f file2 file1 | tail -n1 | cut -d: -f1) )) file1
Tüm kuyruk sürümlerinin artı gösterimi desteklemediğini unutmayın.