Как к строкам дисплея 2-4 после каждого результата grep?

Вы могли пойти с Arch Linux, но это строго не встречает Ваш "пользовательский" дистрибутив, я думаю.

Я пошел бы с Linux С нуля. Это не действительно дистрибутив, а скорее система для создания Вашего собственного дистрибутива. Я думаю, что Вы найдете, что у Вас есть немного "жира" в Вашей системе, когда Вы сделаны, поскольку это имеет Вас здание и установка Tcl/Tk (или по крайней мере это привыкло для), и несколько других вещей, которые не строго необходимы, но позволяют Вам выполнить тестовые сценарии полуавтоматически.

40
13.02.2012, 12:46
6 ответов

Самый простой способ решить его использование grep только, должен передать еще одно инвертированное по каналу grep в конце. Например:

grep -A 4 "The mail system" temp.txt | grep -v "The mail system" | grep -v '^\d*$'
31
27.01.2020, 19:35

Если Вы не привязываетесь к использованию grep, попробовать sed ...

sed -n '/The mail system/{n;n;p}' 

Когда это находит строку, содержащую "Почтовую систему", это читает следующую строку дважды, через n;n;, отбрасывание каждой предыдущей строки, как это делает так.
Это оставляет 3-ю строку Вашей группы в пространстве шаблона, которое затем печатается через sed's p команда.. Продвижение -n опция предотвращает всю другую печать.

Для печати следующих двух строк также это - просто случай следующих и печати n;p вдвое больше.

sed -n '/The mail system/{n; n;p; n;p; n;p}'   

Чтения следующей строки для строк, которых Вы требуете, могут быть накоплены и распечатаны единственный блок со всего один p... N читает следующую строку и добавляет его к пространству шаблона,

Вот сжатая версия финала...

sed -n '/The mail system/{n;n;N;N;p}'   

Если бы Вы хотите разделитель группы, подобный тому, что произвел бы grep, можно использовать команду вставки sed i (который должен быть последней командой на строке)...

Вот синтаксис для включения разделителя группы

sed -n '/The mail system/{n;n;N;N;p;i--
       }' > output-file  # or | ...

Вот вывод для первого соответствия:

<slavicatomic118@hotmail.com>: host mx1.hotmail.com[65.54.188.94] said: 550
    Requested action not taken: mailbox unavailable (in reply to RCPT TO
    command)                                                                    
--
28
27.01.2020, 19:35
  • 1
    +1.Спасибо. Мне не нужен он в этом случае, но я сохраню отмеченным в случае, если я заставляю более сложный материал обрабатывать. –  Milan Babuškov 14.02.2012, 21:42
  • 2
    Это - большой ответ! –  dotancohen 24.01.2013, 14:45
grep -A 2 -B -2 "The mail system" mbox_file

-B для предыдущих строк, таким образом, никакая потребность дать - отрицательная величина.

grep -A 2 -B 2 "The mail system" mbox_file   # This will work please check
9
27.01.2020, 19:35
  • 1
    Это не отвечает на вопрос. -A 2 -B 2 печать от двух строк перед контекстом к 2 строкам после контекста. Вопрос о печати от 2 строк после контекста к 4 строкам после контекста. –  daniel.neumann 12.02.2018, 16:56

Я не вижу никакой смысл в использовании только grep (s), кроме того, если это - строгое ограничение. Это не может быть сделано с одним вызовом к grep.

grep -A 2 "The mail system" mbox_file | tail -n +3
  • grep: Найдите строку и произведите 2 строки после,
  • хвост: сократите первые 2 строки (т.е. начните с третьей строки).
1
27.01.2020, 19:35
  • 1
    Это только работает, если существует единственный согласующий отрезок длинной линии, который является, вероятно, не, что спрашивает вопрос. –  jw013 08.11.2012, 19:03
  • 2
    Это - ничто, что вопрос, который задают для, но это помогает мне в моей текущей ситуации :-). –  daniel.neumann 12.02.2018, 16:57
  • 3
    @daniel.neumann, который я знаю, но я был точно в Вашей обуви и думал Google-fu других, будет вести сюда также. –  TWiStErRob 12.02.2018, 17:24

Это печатает следующую 1 строку после соответствия regexp, с помощью Perl

perl -ne 'print if( (/The mail system/ && ($end=1))..!$end-- )' 
0
27.01.2020, 19:35

Если вы хотите удалить первые 2 строки передать его наsed

sed '1,2d'

как в

grep -A 2 "The mail system" mbox_file | sed '1,2d'
1
11.05.2020, 07:34

Теги

Похожие вопросы