[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 행을 인쇄 함을 의미합니다.