grep 계열 명령어
3.1 grep 명령어
3.1.1 grep의 의미
grep : 파일 전체를 뒤져 정규표현식에 대응하는 모든 행들을 출력한다.
egrep : grep의 확장판으로, 추가 정규표현식 메타문자들을 지원한다.
fgrep : fixed grep 이나 fast grep으로 불리며, 모든 문자를 문자 그래도 취급한다. 즉, 정 규표현식의 메타문자도 일반 문자로 취급한다.
3.1.2 grep의 동작 방법
grep에서 사용하는 정규표현식 메타문자
메타문자 | 기 능 | 사용 예 | 사용 예 설명 |
^ | 행의 시작 지시자 | \'^love\' | love로 시작하는 모든 행과 대응 |
$ | 행의 끝 지시자 | \'love$\' | love로 끝나는 모든 행과 대응 |
. | 하나의 문자와 대응 | \'l..e\' | l 다음에 두 글자가 나오고 e로 끝나는 문자열을 포함하는 행과 대응 |
* | 선행문자와 같은 문자의 0개 혹은 임의개수와 대응 | \' *love\' | 0개 혹은 임의 개수의 공백 문자 후에 love로 끝나는 문자열을 포함한 행과 대응 |
[] | [] 사이의 문자 집합중 하나와 대응 | \'[Ll]ove\' | love나 Love를 포함하는 행과 대응 |
[^ ] | 문자집합에 속하지 않는 한 문자와 대응 | \'[^A-K]love\' | A와 K 사이의 범위에 포함되지 않는 한 문자와 ove가 붙어있는 문자열과 대응 |
\\< | 단어의 시작 지시자 | \'\\<love\' | love로 시작하는 단어를 포함하는 행과 대응(vi,grep에서 지원) |
\\> | 단어의 끝 지시자 | \'love\\>\' | love로 끝나는 단어를 포함하는 행과 대응 (vi,grep에서 지원) |
\\(..\\) | 다음 사용을 위해 태그를 붙인다. | \'\\(lov\\)ing\' | 지정된 부분을 태크1에 저장한다. 나중에 태그값을 참고하려면 \\1을 쓴다. 맨 왼쪽부터 시작해 태그를 9개가지 쓸 수 있다. 왼쪽 예에서는 lov가 레지스터1에 저장되고 나중에 \\1로 참고할 수 있다. |
x\\{m\\} | 문자 x를 m번 반복한다. | \'o\\{5\\}\' | 문자 o가 5회 연속적으로 나오는 모든 행과 대응 |
x\\{m,\\} | 적어도 m번 반복한다. | \'o\\{5,\\}\' | 문자 o가 최소한 5회 반복되는 모든 행과 대응 |
x\\{m,n\\} | m회 이상 n회 이하 반복한다. | o\\{5,10\\}\' | 문자 o가 5회에서 10회 사이의 횟수로 연속적으로 나타나는 문자열과 대응 |
grep의 옵션
옵션 | 동작 설명 |
-b | 검색 결과의 각 행 앞에 검색된 위치의 블록 번호를 표시한다. 검색 내용이 디스크의 어디쯤 있는지 위치를 알아내는데 유용하다. |
-c | 검색 결과를 출력하는 대신, 찾아낸 행의 총수를 출력한다. |
-h | 파일 이름을 출력하지 않는다. |
-i | 대소문자를 구분 하지 않는다.(대문자와 소문자를 동일하게 취급). |
-l | 패턴이 존재하는 파일의 이름만 출력한다.(개행문자로 구분) |
-n | 파일 내에서 행 번호를 함께 출력한다. |
-s | 에러 메시지 외에는 출력하지 않는다. 종료상태를 검사할 때 유용하게 쓸 수 있다. |
-v | 패턴이 존재하지 않는 행만 출력한다. |
-w | 패턴 표현식을 하나의 단어로 취급하여 검색한다. |
# grep -n \'^jack:\' /etc/passwd
(/etc/passwd 파일에서 jack을 찾는다. jack이 행의 맨 앞에 있으면 행 번호를 화면으로 출력한다.)
3.1.3 grep과 종료 상태
grep은 파일 검색의 성공 여부를 종료 상태값으로 되돌려준다.
패턴을 찾으면 0, 패턴을 찾을 수 없으면 1, 팡리이 존재하지 않을 경우 2
sed,a자 등은 검색의 성공 여부에 대한 종료 상태값을 반환하지 않는다. 다만 구문 에러가 있을 경우에만 에러를 보고한다.
3.2 정규표현식을 사용하는 grep의 예제
# grep NW datafile
# grep NW d*
(d로 시작하는 모든 파일에서 NW를 포함하는 모든 행을 찾는다.)
# grep \'^n\' datafile
(n으로 시작하는 모든 행을 출력한다.)
# grep \'4$\' datafile
(4로 끝나는 모든 행을 출력한다.)
# grep TB Savage datafile
(TB만 인자이고 Savage와 datafile은 파일 이름이다.)
# grep \'TB Savage\' datafile
(TB Savage를 포함하는 모든 행을 출력한다.)
# grep \'5\\.\' datafile
(숫자 5, 마침표, 임의의 한 문자가 순서대로 나타나는 문자열이 포함된 행을 출력한다.)
# grep \'\\.5\' datafile
(.5가 나오는 모든 행을 출력한다.)
# grep \'^[we]\' datafile
(w나 e로 시작하는 모든 행을 출력한다.)
# grep \'[^0-9]\' datafile
(숫자가 아닌 문자를 하나라도 포함하는 모든 행을 출력한다.)
# grep \'[A-Z][A-Z] [A-Z]\' datafile
(대문자 2개와 공백 1개, 그리고 대문자 하나가 연이어 나오는 문자열이 포함된 행을 출력한다.)
# grep \'ss* \' datafile
(s가 한 번 나오고, 다시 s가 0번 또는 여러번 나온 후에 공백이 연이어 등장하는 문자열을 포함한 모든 행을 출력한다.)
# grep \'[a-z]\\{9\\}\' datafile
(소문자가 9번 이상 반복되는 문자열을 포함하는 모든 행을 출
//유닉스 쉘 바이블 (엘리 퀴클리 지음)에서 발췌
'Server' 카테고리의 다른 글
/etc/passwd /etc/shadow 합치기/나누기 (0) | 2017.01.06 |
---|---|
리눅스 계정 관리 (0) | 2017.01.06 |
LSOF 설치 및 사용가이드 (0) | 2017.01.06 |
syslog.conf 로그파일 종류 (0) | 2017.01.06 |
ssh RSA 암호화 키로 접속하기 (0) | 2017.01.06 |