문제

나는하고 싶다 grep 문자열의 경우 이전 5개 라인과 다음 5개 라인 및 일치하는 라인도 표시합니다.어떻게 하면 이런 일을 할 수 있을까요?

도움이 되었습니까?

해결책

을 위한 BSD 또는 암소 비슷한 일종의 영양 grep 당신이 사용할 수있는 -B num 경기 전 라인 수를 설정하고 -A num 경기 후 줄 수에 대해.

grep -B 3 -A 2 foo README.txt

전후에 동일한 수의 줄을 원한다면 사용할 수 있습니다 -C num.

grep -C 3 foo README.txt

그러면 앞의 3줄과 뒤의 3줄이 표시됩니다.

다른 팁

-A 그리고 -B 작동할 것입니다. -C n (을 위한 n 문맥 라인) 또는 그냥 -n (을 위한 n 맥락의 줄...n이 1~9인 경우).

확인 grep과 유사한 인수로 작동하며 허용됩니다. -C.그러나 일반적으로 코드를 검색하는 것이 더 좋습니다.

grep astring myfile -A 5 -B 5

"astring"에 대해 "myfile"을 grep하고 각 일치 전후에 5줄을 표시합니다.

나는 일반적으로 사용

grep searchstring file -C n # n for number of lines of context up and down

grep과 같은 많은 도구에도 정말 훌륭한 man 파일이 있습니다.나는 나 자신을 언급하고있다. grep의 매뉴얼 페이지 당신이 할 수 있는 일이 너무 많기 때문이다.

man grep

많은 GNU 도구에는 정보 페이지 매뉴얼 페이지 외에 더 유용한 정보가 있을 수 있습니다.

info grep

"/some/file.txt"에서 "17655"를 검색하면 앞뒤에 10줄의 컨텍스트가 표시됩니다(Awk 사용). 출력 앞에는 줄 번호 뒤에 콜론이 옵니다.'grep'이 "-[ACB]" 옵션을 지원하지 않는 경우 Solaris에서 이 옵션을 사용하십시오.

awk '

/17655/ {
        for (i = (b + 1) % 10; i != b; i = (i + 1) % 10) {
                print before[i]
        }
        print (NR ":" ($0))
        a = 10
}

a-- > 0 {
        print (NR ":" ($0))
}

{
        before[b] = (NR ":" ($0))
        b = (b + 1) % 10
}' /some/file.txt;

grep 사용

$ grep --help | grep -i context
Context control:
  -B, --before-context=NUM  print NUM lines of leading context
  -A, --after-context=NUM   print NUM lines of trailing context
  -C, --context=NUM         print NUM lines of output context
  -NUM                      same as --context=NUM

ripgrep

성능에 관심이 있다면 사용하세요 ripgrep 다음과 비슷한 구문을 가지고 있습니다. grep, 예를 들어

rg -C5 "pattern" .

-C, --context NUM - 각 경기 전후에 NUM줄을 표시합니다.

다음과 같은 매개변수도 있습니다. -A/--after-context 그리고 -B/--before-context.

이 도구는 다음을 기반으로 구축되었습니다. Rust의 정규식 엔진 그것은 매우 효율적인 대용량 데이터에.

$grep thestring thefile -5

-5 일치 'thestring'위와 아래에 5 줄이 -c 5 또는 -a 5 -B 5에 해당합니다.

Grep에는 다음과 같은 옵션이 있습니다. Context Line Control, 당신은 --contect 그 점에서는 간단하게,

| grep -C 5

또는

| grep -5

트릭을 수행해야합니다

여기는 @Ygor 솔루션 ~에 awk

awk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=3 a=3 s="pattern" myfile

메모:바꾸다 a 그리고 b 앞과 뒤의 줄 수가 있는 변수.

grep을 지원하지 않는 시스템에 특히 유용합니다. -A, -B 그리고 -C 매개변수.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top