Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

grep -i -B 10 'error' data

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

Ответ 2

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

grep -i -A 10 'error data'

Ответ 3

Попробуйте следующее:

grep -i -A 10 "my_regex"

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

Ответ 4

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

grep -i "my_regex" -A 10

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

grep -i "my_regex" -B 10

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

grep -i "my_regex" -C 10

Пример

[email protected]:~$ cat out 
line 1
line 2
line 3
line 4
line 5 my_regex
line 6
line 7
line 8
line 9
[email protected]:~$

Обычный grep

[email protected]:~$ grep my_regex out 
line 5 my_regex
[email protected]:~$ 

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

[email protected]:~$ grep -A 2 my_regex out   
line 5 my_regex
line 6
line 7
[email protected]:~$ 

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

[email protected]:~$ grep -B 2 my_regex out  
line 3
line 4
line 5 my_regex
[email protected]:~$ 

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

[email protected]:~$ grep -C 2 my_regex out  
line 3
line 4
line 5 my_regex
line 6
line 7
[email protected]:~$ 

Ссылка: 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.