본문 바로가기
개발팁

unix grep, linux grep 사용법, grep 문자열 찾기, 옵션, 하위 디렉토리, 특수문자 검색, 파일 내용 찾기, 정규식, regex

by devscb 2024. 8. 16.
반응형

linux grep이란?

특정 파일에서 지정한 문자열을 찾아, 문자열이 찾아진 해당 라인을 출력해주는 도구입니다.
예를 들어 아래와 같은 text.txt 파일이 있다고 칩시다.

fghi
abfc
jkl
def

아래 명령어로 grep 을 사용한다면

grep j text.txt

결과는 아래와 같이 text.txt파일에서 j 가 포함된 줄을 출력해줍니다.

jkl

grep 사용법

grep 사용법은 아래와 같습니다.

grep [옵션] [패턴] [파일명]

grep 옵션

옵션 설명
-E 확장된 정규식을 사용하여 문자열을 찾습니다.
-F 정규식이 아닌 문자열을 사용하여 문자열을 찾습니다.
-c 일치하는 행의 수를 출력합니다.
-e [pattern_list] 입력을 검색하는 동안 사용할 하나 이상의 패턴을 지정합니다. pattern_list의 패턴은 newline 문자로 구분되어야 합니다.
-f 패턴이 있는 파일에서 검색
-i 대소문자를 구분하지 않고 문자열을 찾습니다.
-l 찾으려는 문자열이 포함된 파일명만 출력합니다.
-n 찾으려는 문자열이 포함된 행의 번호를 같이 출력합니다.
-s 에러메시지 출력 안되게 함.
-v invert-match : non-matching lines
-x 행의 모든 문자를 사용하여 전체 고정 문자열 또는 정규식을 일치시키는 입력선만 일치하는 라인을 검색합니다.
-r 하위 폴더가 있으면, 하위 폴더까지도 Recursive(재귀)로 검색합니다.

정규식 검색

grep은 정규식을 이용해서 검색이 가능합니다.
대표적으로 몇가지 유용한 정규식 사용방법에 대한 예는 아래와 같습니다.

# .: 임의의 한 글자
# text.txt 파일에서 a와 b 사이에 임의의 한 글자가 있는 패턴 검색
grep "a.b" text.txt

# *: 0개 이상의 문자가 포함된 패턴
# text.txt 파일에서 a 다음에 b가 0개 이상(즉, a 다음에 b가 없는 경우 포함)
grep "ab*" text.txt

# ^: ~로 시작하는 패턴 
# text.txt 파일에서 abc로 시작하는 패턴 검색
grep "^abc" text.txt

# $: ~를 끝으로 하는 패턴
# text.txt 파일에서 abc로 끝나는 패턴 검색
grep "abc$" text.txt

# []: 문자열 집합 또는 범위
# text.txt 파일에서 a 또는 b 또는 x가 포함된 행 검색
grep "[abx]" text.txt

# text.txt 파일에서 수자가 포함된 패턴 검색
grep "[0-9]" text.txt

# \: escape 문자 바로 다음 문자에 대해 특수문자 해석을 비활성화 
# text.txt 파일에서 abc$로 끝나는 패턴 검색
grep "abc\$$" text.txt


## 하위 디렉토리 검색
하위 디렉토리에 있는 파일도 검색하고 싶으면 -r 옵션을 사용하면 됩니다.
만일 아래와 같은 명령어를 친다면,

grep -rl "text"


출력 결과는 아래와 같습니다. (-l 옵션은 파일명출력)

./themes/LICENSE.md
./themes/README.md
./themes/static/css/style.css
./themes/static/txt/text.txt


## 검색에서 특정 폴더 제외 (--exclude-dir)
grep 은 보통 소스 전체에서 검색할때 사용하는데, 
.svn이나 .git같은 폴더는 검색할 필요가 없을떄가 많습니다.
그럴 때, 아래와 같이 --exclude-dir 옵션을 사용하면 됩니다. 

grep -rl "keyword" . --exclude-dir=.svn

```

총평

편리하게 사용할 수 있어서 좋습니다.
grep -r "text" 와 같이 -r 옵션을 개인적으로 자주 사용합니다.
grep -r "text" > text.txt와 같이 파이프 (|) 를 쓰면 출력내용을 파일로 기록하여,
더욱 유용하게 사용할 수 있습니다.
windows에서는 find "찾을문자" "경로" 가 동일한 tool 입니다.

 

 

#grep, #linux, #unix, #option, #regex, #리눅스, #정규식

728x90
반응형

댓글