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 также принимает ~ вместо +

  • Добавить кавычки и новый разделитель вокруг слов, разделенных пробелами
  • Поиск файла для строки, окруженной двумя другими известными строками?
  • Как я могу отображать 3 строки текста за один раз на 1 строку?
  • grep для извлечения подстроки из огромной строки
  • Найти последнее появление строки в нескольких файлах
  • Скопируйте текстовые строки из файла и добавьте их в один и тот же файл с префиксом средней линии или удалите префикс средней строки
  • Как искать слово, сохраненное в пространстве удержания с помощью sed?
  • Многострочная обработка текста: редактирование sshd_config
  • Найти отличия в файле и сортировке файла по ключу
  • Удалить строку с пробелами и цитатами из xml-файла
  • Вставить текст в определенные строки файла?
  • Bash перебирает список строк
  • Interesting Posts

    Веб-камера Centos, быстрое приложение для моментального снимка?

    Как этот скрипт начинается без его зависимости?

    Удалить несколько регулярных выражений из переменной с помощью sed

    По какой-то причине «sudo ssh -w any -o Tunnel = ethernet root @ remote» создает туннельные устройства вместо устройств-кранов

    Дикросы на основе Debian, которые имеют регулярный цикл выпуска

    путают о двойном цитировании

    Параметры MaxStartups и MaxSessions для ssh-соединений?

    Сохранять фиксированную область RAM-памяти в качестве блочного устройства (с заданным начальным физическим адресом)

    Лимитированная линия Emacs на границе слова

    Sshd_config TPCKeepAlive по-прежнему использует незашифрованный канал и, следовательно, уязвим

    Как вставить пустую страницу в PDF с помощью ghostscript или pdftk?

    Объедините информацию из двух файлов, по очереди

    Поиск журнала ошибок, связанных с конкретным сбоем в Ubuntu

    Почему цикл for не выполняется в каталоге

    Вы имели в виду эту команду? (как ответить на это)

    Linux и Unix - лучшая ОС в мире.