12

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

4 ответа4

17

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

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

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

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

6

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

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

Используйте аргумент -A для grep чтобы указать, сколько строк за пределами соответствия вывести.

1

Вывести 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .