본문 바로가기
Linux

Linux - 파일, 압축 파일, 문자열 검색 - grep, egrep, fgrep, rgrep, zgrep

by 올엠 2022. 3. 15.
반응형

grep(grep, egrep, fgrep, rgrep, zgrep 모두 동일) 은 문자열 라인을 검색할 수 있는 명령으로 Linux에서 가장 많이 사랑받는 명령어일 것이다. 필자 역시 지금도 종종 사용하는 이 명령어에 대해서 정리해 보고자한다.
특히 zgrep은 gzip을 압축된 파일에 대해 압축을 해제하지 않고 문자열 패턴 검색이 가능하다.

압축 해제 없이 바로 검색이 가능 - zgrep

사용법

grep 명령은 일반적으로 아래 와 같이 사용된다.
grep [OPTION...] PATTERNS [FILE...]

옵션

grep 옵션은 기본적으로 grep --help를 통해서 확인하는 것을 추천한다.
여기에서는 주요하게 사용되는 많이 사용되는 옵션만 정리해 보겠다.
출력 라인 처리와

구분 옵션 설명
출력 라인 처리 -b ,패턴 매칭이 되기 전 라인의 바이트수 출력
출력 라인 처리 -n 문자열이 들어있는 라인번호 출력
매칭 처리 -i 대소문자를 구분하지 않음
매칭 처리 -e 검색 패턴을 사용할 때, 여러개 사용시 -e 옵션을 주고 ""로 묶어서 사용할 수 있다. 하나 입력시에는 무시 가능
출력 문자열 처리 -l(L소문자) 문자열을 포함하는 파일 이름만 출력
출력 문자열 처리 -c 파일 당 패턴이 일치하는 라인의 갯수 출력
파일/디렉토리 처리 -a 바이너리 파일을 텍스트 파일로 처리
파일/디렉토리 처리 -r 하위 디렉토리 탐색
파일/디렉토리 처리 -R 심볼릭 링크까지 포함하여 모든 하위 디렉토리 탐색

더 많은 옵션이 존재 하지만 중요하게 볼만한 옵션은 이정도인것으로 보인다.

문자열 패턴 정규 표현식(Regular Expression)

grep 검색 패턴에 사용되는 문자열 패턴 정규 표현식은 정규 표현식(Regular Expression)를 따르기 때문에 정규 표현식관련해서 이해를 해둘 필요가 있다.

       
^ 행의 시작 지시자 ^allm allm으로 시작하는 모든 행
$ 행의 끝의 지시자 allm$ allm으로 끝나는 모든 행
. 하나의 문자 대응 a..m a이후 두개의 문자후 m이 나오는 행
* 선행 문자가 0개 이상 매칭 *allm allm이거나 allm 앞에 문자가 아무것이나 존재하는 행
[] []사이 문자중 하나 매칭 [al]lm alm이거나 alm
[-] []사이 문자중 포함하는 문자 매칭 [a-l]lm a부터 l까지 문자가 포함하는 문자와 매칭
[^] []사이의 문자가 포함되지 않는 매칭 [^a-l]lm a부터 l까지 문자가 포함하지 않는 한 문자와 lm이 매칭
x\{m\} x 문자를 특정 횟수만큼 반복 a\{5\} 문자 a가 5번 연속적으로 나오는 행과 매칭

정규 표현식은 더 많이 존재하지만, 이정도만 이해하고 있어도 유용하게 사용할 수 있을 거라 생각된다.
regex101: build, test, and debug regex 에서 정규 표현식에 대해서 테스트해보는 것도 좋을 것이다.

regex101: build, test, and debug regex

Regular expression tester with syntax highlighting, explanation, cheat sheet for PHP/PCRE, Python, GO, JavaScript, Java, C#/.NET.

regex101.com

예제

// .log 확장자를 가진 모든 파일에서 address가 포함된 모든 행을 찾는다.
$ grep 'address' *.log

// b로 시작하는 모든 파일에서 allm 를 포함하는 모든 행을 찾는다. 
$ grep 'allm' b*

// 루트 디렉토리에서 모든 하위 디렉토리의 파일을 포함하여, a로 시작하고 t로 끝나는 7자리 단어를 찾는다.
$ grep 'a.....t' / -r

// dmes로 시작하는 현재 디렉토리의 gzip 파일에 대해, error가 포함된 모든 행을 찾는다.
$ zgrep 'error' ./dmes*.gz

반응형