Привет, я очень новичок в программировании 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
Есть ли способы сделать это?
Вы можете использовать -B
и -A
для печати строк до и после матча.
grep -i -B 10 'error' data
Будут напечатаны 10 строк перед совпадением, включая собственно совпадающую строку.
test=$(grep -i -B 10 'error' data)
, и распечатать ее с помощью echo $test
, я получил прямые длинные строки в качестве вывода.
echo "$test"
а не « echo $test
Способ сделать это находится рядом с верхней частью страницы man
grep -i -A 10 'error data'
Попробуйте следующее:
grep -i -A 10 "my_regex"
-A 10 означает, напечатайте десять строк после соответствия "my_regex"
Это отображает 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 и две строки перед
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.
error
.