grep
문자열을 원하지만 앞의 다섯 줄과 다음 다섯 줄뿐만 아니라 일치하는 줄도 표시하고 싶습니다 . 이 작업을 어떻게 수행 할 수 있습니까?
man grep | grep -C 1 context
:)
man grep | grep -C 1 "\-C"
;)
grep
문자열을 원하지만 앞의 다섯 줄과 다음 다섯 줄뿐만 아니라 일치하는 줄도 표시하고 싶습니다 . 이 작업을 어떻게 수행 할 수 있습니까?
man grep | grep -C 1 context
:)
man grep | grep -C 1 "\-C"
;)
답변:
들어 BSD 나 GNU 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 인 한) 작동합니다.
-n
형식을 시도하고 까지만 작동한다는 것을 알았습니다 9
. 들어 15
는 5 개 라인 반환
-A
, -B
또는 -C
). 일반적으로 옵션 지정자 뒤에 값 ( -o a.out
GCC에 출력 파일을 지정하기 위해)이 있지만, 간단한 스위치 / 플래그 ( -g
GCC에서 디버깅 정보를 활성화하기 위해) 로 기능 할 수도 있습니다 . 그러나 옵션 사이의 공백은 선택 사항이므로 값이없는 옵션의 경우 병합 할 수 있습니다 ( -ABC
). 이는 -15
해석되고 -1 -5
(두 개의 개별 옵션) -5
재정의 됨을 의미 합니다 -1
.
ack 는 grep과 비슷한 인수로 작동하며 받아들 -C
입니다. 그러나 일반적으로 코드를 검색하는 것이 좋습니다.
grep
"광고" ack
(실제로 훌륭한 도구 임)에 그것을 사용하지 않는 것이 좋은 생각입니다…
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
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
"/some/file.txt"앞뒤에 10 줄의 컨텍스트 (Awk 사용)를 표시하는 "17655"를 검색하고 출력 앞에 줄 번호와 콜론을 차례로 표시합니다. '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;
다음은 @ 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
라인의 수와 변수 전후.
그것은 그렙의 지원하지 않는 시스템에 특히 유용 -A
, -B
및 -C
매개 변수를.
코드를 자주 검색하면 AG 실버 검색 기가 grep보다 훨씬 효율적입니다 (즉, 빠릅니다).
-C 옵션을 사용하여 컨텍스트 행을 표시합니다.
예 :
ag -C 3 "foo" myFile
line 1
line 2
line 3
line that has "foo"
line 5
line 6
line 7