playdata/homework

[Linux] grep 명령어와 정규 표현식

soojin1 2024. 7. 12. 00:03

📚 모두의 리눅스 p.276 ~ 292

1. 파일에서 문자열 검색 

grep [옵션] <검색 패턴> <파일 이름>

ex) /etc/passwd 파일에서 bash 문자열 검색

$ grep bash /etc/passwd

 

1) -n 옵션 : 행 번호 출력

ex) /etc/bash.bashrc에서 PS1 이라는 문자열을 검색하여 행 번호와 함께 출력

$ grep -n PS1 /etc/bash.bashrc

 

2) -i 옵션 : 대소문자 구별x

ex) system 문자열 검색

$ grep system /etc/bash.bashrc  -> "system"만 검색됨.

$ grep -i system /etc/bash.bashrc  -> "System", "sYsyeM", "SYSTEM" 등 검색됨.

 

3) -v 옵션 : 검색할 문자열이 나타나지 않는 행을 출력

ex) bash 문자열이 포함되지 않는 행 출력

$ grep -v bash /etc/passwd

 

2. 표준 입력에서 문자열 검색

ex) ls 명령어 출력 결과 중 cron이 포함된 행 출력

$ ls /etc | grep cron

 

3. (기본) 정규표현식

-조건에 일치하는 문자열 집합을 표현하는 방법

 

1) .(점) : 임의의 문자 하나

ex) $ grep 't.st' example.txt

test.example.txt

tfst.example.txt

tzst.example.txt

 

ex) $ grep 't..st' exmple.txt

tzzst.example.txt

 

ex) $ grep '.org' example.txt

www.example.org  -> .(점)은 기호를 포함한다.

borg.example.com -> .(점)은 알파벳을 포함한다.

_1org.example.com -> .(점)은 숫자를 포함한다.

 

ex) $ grep '\.org' example.txt

www.example.org -> 점 기호 자체를 검색하고 싶을 때는 ' \. ' 라고 표시

 

2) [ ] : 여러 문자 중 하나를 지정

ex) $ grep 't[ef]st' example.txt

test.example.txt

tfst.example.txt

 

ex) $ grep 'mail[1-4]' example.txt

mail1.example.txt

mail2.example.txt

mail3.example.txt

mail4.example.txt

 

ex) $ grep 'mail[^13] example.txt -> 1,3 이외

mail1.example.txt (X)

mail3.example.txt(X)

mail7.example.txt(0)

 

3) ^ : 행의 시작

ex) cron으로 시작하는 문자열 검색

$ ls /etc | grep '^cron'

 

4) $ : 행의 마지막

ex) $ grep 'net$' example.txt

test.example.net

tfst.example.net

 

ex) $ grep '^$' example.txt : 시작이 곧 끝인 행 = 빈 행

 

5) * : 0회 이상의 반복

ex) Be*r 

-> 0회 반복 : Br

-> 1회 반복 : Ber

-> 2회 반복 : Beer

 

$ grep 'Be*r' drink.txt

Ber

Beer

BeerBeer

BeerBeerBeer

Beeeeer!!

Br.  ------> 0회 반복 포함!

 

ex) $ grep '^B[ea]*r$' drink.txt   

( (1) B로 시작 (2) e/a 0번 이상 반복 (3) r로 끝나기 )

Ber

Beer

Bear

Br

 

ex)  '.*' : 임의의 문자가 0회 이상 반복 = 모든 문자열

ex) ex로 시작해 txt로 끝나는 행 : $ grep '^ex.*txt$

 

4. 확장 정규표현식

-기본 정규표현식에서 메타 문자가 늘어난 버전

- $ grep -E

1) + : 전 문자가 1회 이상 반복

ex) Be+r

-> 0회 반복 : Br (X)

-> 1회 반복 : Ber

-> 2회 반복 : Beer

 

ex) $ grep -E 'Be+r' drink.txt

Ber

Beer

BeerBeer

BeerBeerBeer

Beeeeeeer!!!

Br ------------> 0회이기 때문에 해당 X

 

2) ? : 0회 또는 1회 

ex) $ grep -E 'Wine ?Wine' drink.txt (공백 + ? : 공백이 하나 있거나 없는 경우 출력)

Wine Wine

WineWine

 

3) { } : 반복 횟수 지정

ex) $ grep -E 'Be{1,2}r' drink.txt  (e가 1회이상 2회이하)

Ber

Beer

BeerBeer

BeerBeerBeer

 

ex) $ grep -E 'Be{2}r' drink.txt (e가 2회 반복)

Beer

BeerBeer

BeerBeerBeer

 

ex) e가 4번 이상 나타나는 패턴 검색

$ grep -E 'Be{4, }r' drink.txt

Beeeeeeeeer!!

 

4) ( ) : 그룹화

ex) $ grep -E '(Wine){2, }' drink.txt 

(Wine 단어가 2회 이상 반복)

WineWine

 

5) | : OR 조건

ex) $ grep -E 'My (Vodka|Wine)' drink.txt

My Vodka

My Wine

 

 

'playdata > homework' 카테고리의 다른 글

텍스트 에디터 vim(vi) 사용법 요약  (2) 2024.07.14