[bash] grep 결과 전후에 줄을 가져 오는 방법은 무엇입니까?

안녕하세요, 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 개의 줄을 인쇄합니다.


답변

일치하는 줄 뒤에 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:~$

일반 그렙

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

정확히 일치하는 줄과 그 다음에 2 줄을 그립니다.

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

정확히 일치하는 줄과 2 줄을 그리십시오.

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

정확하게 일치하는 줄과 2 줄 전후를 잡으십시오

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

참조 : 맨 페이지 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”와 일치 한 후 10 행을 인쇄 함을 의미합니다.


답변