Как получить и распечатать следующие N строк после попадания?


16

Я хотел бы выполнить поиск вхождения в текстовом файле, а затем распечатать следующие N строк после каждого найденного вхождения. Есть идеи?

Ответы:


23

Grep имеет следующие параметры, которые позволят вам сделать это (и тому подобное). Возможно, вы захотите взглянуть на справочную страницу для получения дополнительной информации:

  • -A num Печатать num строк конечного контекста после каждого совпадения. Смотрите также параметры -B и -C.

  • -B num Печатать количество строк переднего контекста перед каждым совпадением. Смотрите также параметры -A и -C.

  • -C [num] Вывести num строк начального и конечного контекста, окружающих каждое совпадение. По умолчанию 2 и эквивалентно -A 2 -B 2. Примечание: между опцией и ее аргументом не должно быть пробелов.


7

Если у вас есть GNU grep, это опция -A/ --after-context. В противном случае вы можете сделать это с awk.

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename

1
awk '/regex/{p=2} p > 0 {print $0; p--}' filename- работает, твой нет.
BladeMight


3

Вывести N строк после совпадения строк

Вы можете использовать grepс -A nопцией для печати N строк после сопоставления строк.

Например:

$ cat mytext.txt 
  Line1
  Line2
  Line3
  Line4
  Line5
  Line6
  Line7
  Line8
  Line9
  Line10

$ grep -wns Line5 mytext.txt -A 2
5:Line5
6-Line6
7-Line7

Другие связанные варианты:

Вывести N строк перед соответствием строк

Используя -B nопцию, вы можете напечатать N строк перед соответствием строк.

$ grep -wns Line5 mytext.txt -B 2
3-Line3
4-Line4
5:Line5

Вывести N строк до и после соответствия строк

Используя -C nопцию, вы можете напечатать N строк до и после соответствия строк.

$ grep -wns Line5 mytext.txt -C 2
3-Line3
4-Line4
5:Line5
6-Line6
7-Line7
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.