0%

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

linux

linux grep이란?

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

1
2
3
4
fghi
abfc
jkl
def

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

1
grep j text.txt

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

1
jkl

grep 사용법

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

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

grep 옵션

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

정규식 검색

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# .: 임의의 한 글자
# 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”

1
2

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

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

1
2
3
4
5
6

## 검색에서 특정 폴더 제외 (--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 입니다.