Как мне получить строки до / после результата grep в bash?



Привет я очень новичок в программировании bash. Я хочу способ поиска в данном тексте. Для этого я использую :



grep -i "my_regex"


это работает. Но, учитывая data такой :



This is the test data
This is the error data as follows
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends


как только я нашел слово error ( через grep -i error data), Я хочу найти 10 строк, которые следуют за словом error. Поэтому мой вывод должен быть:



    . . . 
. . . .
. . . . . .
. . . . . . . . .
Error data ends


есть ли способы сделать это?

657   4  

4 ответов:

можно использовать -B и -A для печати строк до и после матча.

grep -i -B 10 'error' data

напечатает 10 строк перед матчем, включая саму совпадающую строку.

это печатает 10 строк конечного контекста после сопоставления строк

grep -i "my_regex" -A 10

Если вам нужно напечатать 10 строк ведущего контекста перед соответствующими строками,

grep -i "my_regex" -B 10

и если вам нужно напечатать 10 строк переднего и заднего выходного контекста.

grep -i "my_regex" -C 10

пример

user@box:~$ cat out 
line 1
line 2
line 3
line 4
line 5 my_regex
line 6
line 7
line 8
line 9
user@box:~$

нормальный grep

user@box:~$ grep my_regex out 
line 5 my_regex
user@box:~$ 

точное соответствие строки grep и 2 линии после

user@box:~$ grep -A 2 my_regex out   
line 5 my_regex
line 6
line 7
user@box:~$ 

Grep точные совпадающие строки и 2 строки перед

user@box:~$ grep -B 2 my_regex out  
line 3
line 4
line 5 my_regex
user@box:~$ 

Grep точные совпадающие строки и 2 строки до и после

user@box:~$ grep -C 2 my_regex out  
line 3
line 4
line 5 my_regex
line 6
line 7
user@box:~$ 

ссылка: manpage grep

-A num
--after-context=num

    Print num lines of trailing context after matching lines.
-B num
--before-context=num

    Print num lines of leading context before matching lines.
-C num
-num
--context=num

    Print num lines of leading and trailing output context.

способ сделать это в верхней части страницы

grep -i -A 10 'error data'

попробуйте это:

grep -i -A 10 "my_regex"

- A 10 означает, вывести десять строк после совпадения с "my_regex"

Comments

    Ничего не найдено.