Grep для нескольких строк, покажите количество строк после одной из строк (но не другой)

Как следует из названия, я хотел бы искать файл для нескольких строк и для одной конкретной строки, также показать 5 строк.

cat file | grep -e 'string1' -e 'string2' 

конечно, но я хотел бы получить что-то вроде

 cat file | grep -e 'string1' -e -A 5 'string2' 

Как я могу сделать это так, что (я предполагаю использовать параметр -A 5) он показывает только строки, содержащие строку string1, и только строки, содержащие string2 и 5 строк после строки2, но не 5 строк после строки1?

EDIT: только что он работал с awk:

 cat file | awk '/string1/{c=1}/string2/{c=5}{while(c-->0){print;getline}}' 

3 Solutions collect form web for “Grep для нескольких строк, покажите количество строк после одной из строк (но не другой)”

Вы не можете сделать это, используя один grep . Вам нужно использовать два экземпляра grep :

 grep 'string1' file; grep -A 5 'string2' file 

Если вы хотите запустить второй после успеха первого:

 grep 'string1' file && grep -A 5 'string2' file 

о awk-коде

 awk '/string1/{if ( c<=0 ) c=1 ;}/string2/{c=5}{ if (c-->0) print;}' file 
  • не cat ... | awk cat ... | awk , awk может читать файл.
  • Я перестраиваю тест (если строка1 является одной строкой после строки2, она прерывает печать в решении OP)

Sed раствор:

 sed -n '/string2/,+4{p;b;};/string1/p' file 

мой sed также принимает ~ вместо +

  • Изменить имена файлов в Makefile
  • дифференцируя два файла и получая уникальный результат в третьем
  • Как я могу группировать числа в файле
  • как подражать «замените abb a» на sed?
  • Как вставить текст в качестве альтернативы из двух файлов с общим шаблоном
  • Как печатать текст между первым вступлением пары строк?
  • Как удалить часть строки
  • Как прочитать файл свойств через мой скрипт?
  • sed с множественным выражением для аргумента на месте
  • Как сопоставить 2 больших файла и распечатать разницу в сценарии оболочки
  • Поведение POSIX привязок sed и $ regex с многострочными пространствами шаблонов
  • Linux и Unix - лучшая ОС в мире.