자유롭게 게시물을 올릴수있는 게시판입니다.
  • 유년추억
  • 학교생활
  • 입시준비
  • 대학생활
  • 군생활
  • 알바생활
  • 취업준비
  • 직장생활
  • 원룸생활
  • 연애중
  • 결혼준비
  • 집안살림
  • 자녀교육
  • 창업준비
  • 이민유학
  • 노후생활
  • 전체보기


유닉스에서 많이 쓰이는 명령어---grep명령어 2

 
##행의 끝##
달러 기호($)는 행의 끝을 나타내는 메타 문자입니다. 다음 예는 lamb으로 끝나는 모든 행
을 보여줍니다.
grep "lamb$" kim(임의의 파일)
비교를 위해 다음을 입력해 보세요.
grep "lamb" kim(임의의 파일)
어디에서든지 lamb이 있으면 그 행을 보여주는 것이 위 명령입니다.

아항^^ : 메타 문자라고 항상 특별한 것은 아니다.
$는 정규 표현식의 끝에 올 때만 특별한 의미가 있습니다. 예를 들어 $1.00을 정규 표현식
으로 생각해 보자. 여기에서 $가 행의 끝을 의미하지 않는 것은 명백합니다. 행의 끝에 부
가적인 문자가 올 수 없습니다. 그 결과 grep은 $와 잇달아 오는 1.00을 찾고 있는 것으로
압니다. 같은 법칙이 ^에도 적용됩니다. ^가 행의 처음을 나타내도록 사용하고 싶다면 정규
표현식의 적절한 위치(일반적으로 시작 부분)에 있어야 합니다. 그렇지 않으면 grep은 사용
자가 진짜 ^기호를 찾고 있다고 가정합니다.


##임의의 문자와 대응##
점(.)은 아무 문자와 대응되는 메타 문자입니다. 예를 들어보면.
grep ".he" kim
kim에서 he가 따라붙은 모든 문자를 포함하는 행을 보여줍니다. the, The, She 등과 같은
단어들을 있을 것입니다. 어떤 행에서는 대응 문자열이 어디에 있는지 매우 자세히 보아야
합니다. 예를 들어, 아래 예문에서는 everywhere에서 whe가 대응되는 문자열입니다.
And everywhere that Mary went
그리고 아래 예문에서는 her에서 빈칸과 시작 부분의 he즉 ,"he"가 대응되는 문자열입니다.
And set down beside her

참고: 점과 ?
점은 아무 문자나 의미하기 때문에 ? glob 구문과 같은 목적으로 사용됩니다.
그러나 이는 정규 표현식과 glob 구문을 비교하는 잘못을 저지를 수 있습니다. 정규 표현식
은 텍스트 파일에서 문자열을 찾을 때 사용하고, glob 구문은 명령행에서 파일 이름의 목록
을 만들 때 사용합니다.


점 메타 문자와 다른 메타 문자를 조합해서 사용하면 때때로 유용합니다. 보기를 들어보면,
grep "^.$" kim
언뜻 보면 이 명령은 마침표로 끝나는 모든 행을 보여줄 것 같습니다. 하지만 실제로 입력
해보면 그렇지 않다는 것을 알게 될 것입니다. 정규 표현식 .$은 아무 문자와 행 끝을 의미
합니다. 다시 말해 행 끝의 마지막 문자를 가리킵니다. 그 결과 grep은 파일에 아무 문자도
없는 행을 제외하고 모든 줄과 대응합니다.

##문자 반복##
*은 앞 글자의 반복을 의미하는 메타 문자입니다. (반복되지 않는 경우까지 포함). 예를 들
어보면
grep "uf*e" kim
결과는 아래와 같습니다.
Little boy blue
Little Miss Muffet
Sat on a tuffet
And frightened Miss Muffet away.
정규 표현식 uf*e는 u 다음에 f가 없거나 반복되고 그 다음 e 가 오는 것이다. 다음은 u와
e 사이에 f 가 없는 경우입니다.
다음 예는 u와 e 사이에 f 가 없는 경우입니다.
Little boy blue

참고: _ _ glob 대 정규 표현식
정규 표현식에서 *은 앞의 글자를 가리킵니다. 예를 들어 a*은 a 가 없는 것, a,aa,aaa 등과
대응합니다. glob 구문에서 *은 앞 글자와 상관없이 아무 문자도 없는 것 또는 여러 문자와
대응합니다. 예를 들어, glob 구문으로서 a*은 a로 시작하는 모든 이름으로 치환됩니다. abc,
apple, aardvark.doc 등이 예입니다. glob 구문 *은 정규 표현식 .*과 가장 유사합니다.


*은 아무 문자도 없거나 여러 문자를 의미하는 .*구문으로 가장 많이 사용됩니다. 예를 들
어보면,
grep "W.*e" kim
이 명령은 W 다음에 아무 문자나 오고 , 그 다음에 e가 오는 행을 보여줍니다. 결과는 다음
과 같습니다.
Wee Willie Winkie
Who could travel much faster than light
Who ate a bad apple and died
.*은 항상 가능한 한 가장 긴 문자열과 대응합니다. 예를 들어 다음 줄에서
Wee Willie Winkie
W.*e는 We, Wee, Willie, Winkie 등이 모두 W로 시작해 e로 끝나지만 행 전체와 대응합니
다. grep을 사용할 때 행 전체와 대응한다는 것은 큰 차이가 없습니다. 왜냐하면 grep은 어
쨌든 행 전체를 보여주기 때문입니다.
.*의 또 다른 예로서 아래를 입력해 보세요.
grep "^A.*r$" kim
이 정규 표현식은 처음에는 암호처럼 보일지도 모르지만 조각조각 나누면 단순하다는 걸
알 수 있습니다.
@^A --> 대문자 A로 시작하는 행
@.* --> 아무 문자도 없거나 여러 글자가 뒤따르는 것
@r$ --> 행 끝에 소문자 r이 있는 것
그래서 이 정규 표현식은 결국 A로 시작하고 r 로 끝나면서 그 사이에 아무 글자가 없거나
여러 문자가 있는 것을 의미합니다. 결과는 다음과 같습니다.
Along came a spider
And sat down beside her

##문자 집합##
지난 장에서 대괄호로 묶어 문자 집합을 의미하는 glob 구문을 만들 수 있었습니다. 같은
방법이 정규 표현식에도 사용됩니다. 예를 들어 보면,
grep "[Tt]he" kim
그러면 The 나 the를 포함하는 행을 볼 수 있습니다. 다음을 입력해 보세요.
grep "[TS]he" kim
위와 같으면 The나 She를 포함한 행을 볼 수 있습니다.
이와 같이 문자 집합을 사용할 때, 정규 표현식을 따옴표로 묶는 것이 중요합니다. 그렇지
않으면 shell이 문자 집합을 glob 구문으로 가정하고 치환하려 할 것입니다. 문자 집합에 역
시 범위를 지정할 수 있습니다. 예를 들어보면
grep "[a-z]he" kim
아무 소문자 다음에 he가 따라오는 행을 찾아줍니다.
대괄호 안의 첫 글자가 ^이면 이 구문은 괄호 안의 문자 집합이 아닌 다른 아무 글자나 의
미합니다. 아래의 예를 해 보면
grep "[^a-z]he" kim
위 명령은 소문자가 아닌 아무 글자 다음에 he가 따라오면 그 행을 표시해줍니다. 이것은
The, She 또는 ' he'(빈칸 다음의 he)가 있는 행을 포함합니다. 이와 같이 ^가 대괄호 안에
나타나면 행의 시작을 의미하지 않습니다.

참고 : ! 대 ^
[!a-z]은 소문자가 아닌 모든 글자와 대응되는 glob 구문입니다. [^a-z]는 같은 의미를 지닌
정규 표현식입니다. glob 구문에서는 !dmf 사용하고 정규 표현식에서는 ^을 사용함에 주의 하세요.

***grep의 파이프 사용***
grep에 찾아야 할파일을 지정해 주지 않으면 grep은 표준 입력에서 찾습니다. 이는 다른 명
령어로부터 정보를 추출해 내기 위해 grep을 파이프로 사용할 수 있도록 만듭니다. 예를 들
어 다음과 같이 해 보면
ls -l | grep "^d"
현재 디렉토리에 대한 정보를 얻기 위해 ls -l을 실행시키고 grep을 통해 정보를 연결시킵
니다. grep은 디렉토리에 고나한 정보를 보여주는 d로 시작하는 행을 보여줍니다. 비슷하게
다음 줄은 현재 디렉토리 밑의 파일에 관한 정보를 보여줍니다.
ls -l | grep "^-"
ls 의 -p 옵션은 이름 끝에 슬래쉬(/)를 놓음으로써 디렉토리를 표시한다는 것을 앞에서 설
명을 했습니다. 다음을 입력해보면
ls -p / : grep "/$"
루트 디렉토리에서 ls -p를 실행시키고 슬래쉬로 끝나는 행만을 나타내는 결과를 grep을 통
해 연결시킵니다. 그 결과 앞의 명령은 루트 디렉토리 밑의 모든 디렉토리 이르믕ㄹ 보여줍
니다. 만약 목록이 너무 커서 화면에 알맞게 표시할 수 없다면 more를 사용해 다음처럼 할
수 있습니다.
ls -p / | grep "/$" | more



constantine
2002-09-25 01:25:03
1035 번 읽음
☞ 로그인 후 의견을 남기실 수 있습니다
 캐시선물





365ch.com 128bit Valid HTML 4.01 Transitional and Valid CSS!
태그