OS/Linux

grep 앞뒤 라인 검색하기 + 검색어 색상(보이기)

아르비스 2015. 3. 8. 12:15

grep 사용해서 특정 키워드가 들어간 라인 + 앞뒤 몇라인까지 출력하기

]$ grep "keyword" test.txt
기본적인 방법. test.txt에서 'keyword'라는 글자가 들어간 라인을 모두 찾아서 출력한다.

그런데 여기서 그 라인뿐만 아니라 위,아래 몇 라인까지 출력하고 싶을 때가 있다.
그때는 grep 명령어의 -A, -B 옵션이 유용하다.

]$ grep -A10 "keyword" test.txt
'keyword'가 등장한 라인 다음부터 '-A'뒤의 숫자만큼 즉 열 줄을 더 출력한다.
'-B'는 반대로 그 라인의 부분을 그 숫자만큼 출력한다.

참고로, fgrep은 '하나'의 패턴을 찾을 때 grep보다 빠르게 처리한다고 하며,
두 가지 이상의 패턴을 찾을 때는 egrep을 쓰면 좋다.
egrep은 패턴매치를 인식한다. (awk 또한.)
즉 exp+, exp*, exp?, exp1|exp2|exp3 등의 표현을 쓸 수 있다.

'SampleNumber_SampleName.txt' 파일이
1       KFvE004I06
2       KFvE005E20
3       KFvE007F16
........
49      KFvE002E24
50      KFvE003G18
51      KFvE003G24
52      KFvE005A02
....

이렇게 되어있을 때, egrep 사용법은 다음과 같다. 'OR 매치'를 하고 싶으면,

]$  egrep "^50|^51|^52|^53|^58|^61|^63|^84"  SampleNumber_SampleName.txt
50      KFvE003G18
51      KFvE003G24
52      KFvE005A02
53      KFvE007C11
58      KFvE010B08

]$ egrep "50|51"  SampleNumber_SampleName.txt
50      KFvE003G18
51      KFvE003G24
150     KFVH009J24
151     KFVH010E08

It works.



위와 같이 설정해서 내용은 grep 했지만, 정작 어떤게 검색된 색인어 인지 구분하기 어렵다

이럴때 색인어에 색상을 줄수 있다.


grep --color -e "pattern$" ..


ex) grep --color -e Error -e Exception -B10 -A15