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


151

안녕하세요, 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

그것을 할 수있는 방법이 있습니까?


당신의 설명에서 당신은 단어를 진행하는 10 줄을 원하는 것 같습니다 error.
ThomasW

답변:


266

당신은을 사용 -B하고 -A전과 경기 후 선을 인쇄 할 수 있습니다.

grep -i -B 10 'error' data

일치하는 줄 자체를 포함하여 일치하기 전에 10 개의 줄을 인쇄합니다.


1
고마워요. 그러나이 실행을 this test=$(grep -i -B 10 'error' data)과 같은 변수에 저장 하고를 사용하여 인쇄 echo $test하려고하면 직선 긴 줄이 출력으로 나타납니다.
sriram

1
덕분에 나는 이런 식으로 할 필요가 알아 낸 echo "$test"것이 아니라echo $test
스리 람

25
-C 10한 번에 스 와이프 한 후 10 줄을 인쇄합니다!
Joshua Pinter

특정 사전 지점을 사용 하여이 작업을 수행하는 방법이 있습니까? 내가 잡아야 할 길이가 가변적이라고 말합니까?
Erudaki

31

일치하는 줄 뒤에 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.

3
좋아, 필자는 지금 이것을 몇 번 찾아보아야했다. 어쩌면 나는 이것을 -A (FTER) -B (EFORE) -C (ONTEXT)
Opentuned

11

이 작업을 수행하는 방법은 맨 페이지 상단에 있습니다.

grep -i -A 10 'error data'

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.