반응형
grep 계열 명령어
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번 이상 반복되는 문자열을 포함하는 모든 행을 출력한다.)
# grep '(3).[0-9].*1 *1' datafile
(숫자 3,마침표,임의의 한 숫자,임의 개수의 문자,숫자 3(태그),임의 개수의 탭 문자,숫자 3의 순서를 갖는 문자열이 포한된 모든 행을 출력한다.)
# grep '<north' datafile
(north로 시작하는 단어가 포함된 모든 행을 출력한다.)
# grep '<north>' datafile
(north라는 단어가 포함된 모든 행을 출력한다.)
# grep '<[a-z].*n>' datafile
(소문자 하나로 시작하고, 이어서 임의 개수의 여러 문자가 나오며, n으로 끝나는 단어가 포함된 모든 행을 출력한다. 여기서 .*는 공백을 포함한 임의의 문자들을 의미한다.)
3.3 grep에 옵션 사용
# grep -n '^south' datafile
(행번호를 함께 출력한다.)
# grep -i 'pat' datafile
(대소문자를 구별하지 않게 한다.)
# grep -v 'Suan Chin' datafile
(문자열 Suan Chin이 포함되지 않은 모든 행을 출력하게 한다.
이 옵션은 입력 파일에서 특정 내용의 입력을 삭제하는데 쓰인다.
이 옵션은 입력 파일에서 특정 내용의 입력을 삭제하는데 쓰인다.
# grep -v 'Suan Chin' datafile > black
# mv black datafile
)
# grep -l 'SE' *
(패턴이 찾아진 파일의 행 번호 대신 단지 파일이름만 출력한다.)
# grep -w 'north' datafile
(패턴이 다른 단어의 일부가 아닌 하나의 단어가 되는 경우만 찾는다. northwest나 northeast 등의 단어가 아니라, north라는 단어가 포함된 행만 출력한다.)
# grep -i "$LOGNAME" datafile
(환경변수인 LOGNAME의 값을 가진 모든 행을 출력한다. 변수가 큰따옴표로 둘러싸여 있는 경우, 쉘은 변수의 값으로 치환한다. 작은따옴표로 둘러싸여 있으면 변수 치환이 일어나지 않고 그냥 $LOGNAME 이라는 문자로 출력된다.)
3.4 egrep
egrep(extended grep) : grep에서 제공하지 않는 확장된 정규표현식 메타문자를 지원 한다.
grep와 동일한 명령행 옵션을 지원한다.
egrep에서 지원하는 확장 메타문자
메타문자 |
기능 |
사용 예 |
사용 예 설명 |
+ |
선행문자와 같은 문자의 1개 혹은 임의 개수와 대응 |
'[a-z]+ove' |
1개 이상의 소문자 뒤에 ove가 붙어있는 문자열과 대응. move,approve,love,behoove 등이 해당된다. |
? |
선행문자와 같은 문자의0개 혹은 1개와 대응 |
'lo?ve' |
l 다음에 0개의 문자 혹은 하나의 문자가 o가 나오는 문자열과 대응. love,lve 등이 해당된다. |
a|b |
a 혹은 b와 대응 |
'love|hate' |
love 혹은 hate와 대응. |
() |
정규표현식을 묶어준다 |
'love(able|ly)' |
lovable 혹은 lovely와 대응. |
'(ov)+' |
ov가 한 번 이상 등장하는 문자열과 일치. |
3.4.1 egrep 예제
# egrep 'NW|EA' datafile
(NW나 EA가 포함된 행을 출력한다.)
# egrep '3+' datafile
(숫자 3이 한 번 이상 등장하는 행을 출력한다.)
# egrep '2.?[0-9]' datafile
(숫자 2 다음에 마침표가 없거나 한 번 나오고, 다시 숫자가 오는 행을 출력한다.)
# egrep ' (no)+' datafile
(패턴 no가 한 번 이상 연속해서 나오는 행을 출력한다.)
# egrep 'S(h|u)' datafile
(문자 S 다음에 h나 u가 나오는 행을 출력한다.)
# egrep 'Sh|u' datafile
(패턴 Sh나 u를 포함한 행을 출력한다.)
3.5 고정 grep 과 빠른 grep
fgrep : grep 명령어와 동일하게 동작한다. 다만 정규표현식 메타문자들을 특별하게 취급하지 않는다.
# fgrep '[A-Z]****[0-9]..$5.00' file
([A-Z]****[0-9]..$5.00 이 포함된 행을 출력한다. 모든 문자들을 문자 자체로만 취급한다.)
반응형
'Story > Server' 카테고리의 다른 글
아파치(Apache) mod_rewrite 를 이용한 주소 이동 (0) | 2011.03.11 |
---|---|
아파치 설정으로 검색엔진 차단된 사이트 .htaccess 로 푸는 방법 (0) | 2011.03.04 |
tar로 압축하기 (0) | 2009.02.28 |
구글 ,MS 지원하는 무료 dns 서버 (0) | 2009.02.10 |
sendmail virtusertable 한서버에 여러개의 메일 사용시 방법 (0) | 2009.01.22 |