Якщо припустити, що ви хочете зіставити всю лінійку з вашим малюнком, з 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;
це цикл, який отримує новий рядок з input ( n
), друкує його ( p
) і відгалужує назад, щоб позначити a :a; ...; ba;
.
Оновлення
Ось відповідь, яка наближається до ваших потреб, тобто шаблон у file2, схоплення з file1:
tail -n +$(( 1 + $(grep -m1 -n -f file2 file1 | cut -d: -f1) )) file1
Вбудовану клавішу і вирізання знайдіть перший рядок, що містить візерунок з file2, цей рядок плюс один передається в хвіст, плюс один є, щоб пропустити рядок з малюнком.
Якщо ви хочете почати з останнього матчу замість першого, це буде:
tail -n +$(( 1 + $(grep -n -f file2 file1 | tail -n1 | cut -d: -f1) )) file1
Зауважте, що не всі версії хвоста підтримують додаткові позначення.