Я хотел бы выполнить поиск вхождения в текстовом файле, а затем распечатать следующие N строк после каждого найденного вхождения. Есть идеи?
4 ответа
Grep имеет следующие параметры, которые позволят вам сделать это (и тому подобное). Возможно, вы захотите взглянуть на справочную страницу для получения дополнительной информации:
-A num Печатать num строк конечного контекста после каждого совпадения. Смотрите также параметры -B и -C.
-B num Печатать количество строк переднего контекста перед каждым совпадением. Смотрите также параметры -A и -C.
-C [num] Вывести num строк начального и конечного контекста, окружающих каждое совпадение. Значение по умолчанию 2 и эквивалентно -A 2 -B 2. Примечание: между опцией и ее аргументом не должно быть пробелов.
Если у вас есть GNU grep
, это опция -A
/--after-context
. В противном случае вы можете сделать это с помощью awk
.
awk '/regex/ {p = N}
p > 0 {print $0; p--}' filename
Используйте аргумент -A
для grep
чтобы указать, сколько строк за пределами соответствия вывести.
Вывести 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