본문 바로가기
Linux

egrep 정규표현식 (연습)

by Nirah 2022. 12. 14.

https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D

 

 

이론

 

and 구문에 대해서는 이렇게 두번 실행해서 처리한다.
 egrep 'Dec' dd  | egrep '1172'
1004lucifer

주의할 점은 자릿수 상관없이 모든 문자를 뜻하는 와일드카드의 *와 정규표현식의 *는 뜻이 다르다는 점.

 

 

 

 

 

준비물

 

vim dd
:$r /root/anaconda-ks.cfg 
:$r /var/log/dmesg
:$r /var/log/secure

 

 

 

 

 

정규표현식 작동방식 확인 사이트

https://regexper.com/

 

Regexper

 

regexper.com

 

 

 

 

 

문제


행의 첫 문자가 [ 로 시작하고, 바로 다음 \s(공백)이 4번 반복되는( \{4\} 행 찾기
egrep '^\[\s{4}' dd | more -10

 

문자열이 0개 이상 ( .*)  행 찾기

 egrep '.*' dd  | more -10

 


빈 줄 찾기

egrep '^$' dd | more -10


괄호로 끝나는 행 찾기

egrep '\)$' dd  | more -10


행 마지막 문자열이 disable) 로 끝나는 행 찾기

egrep 'disabled\)$' dd | more -10

단어가 dis로 시작하는 단어를 포함한 행 찾기

egrep 'dis*' dd  | more -10


단어가 ed로 끝나는 단어를 포함한 행 찾기

egrep 'ed\>' dd | more -10


단어의 시작을 se로 시작하고, 바로다음 문자 s가 두번 나오는 문자를 포함 한 행 찾기

egrep '\<ses{2,}' dd  | more -10


한행에 254문자 이상인 행 찾기

( '^*{480,}$' 는 작동하지 않는다! 왜냐하면 앞에 선행되는 글자가 없는 상태라 그렇다. 와일드카드랑 헷갈리지 말 것)



--password 문자열이 있는 행 찾기

 egrep '\-\-password' dd  | more -10


$가 들어 있는 행 찾기

 egrep '\$' dd  | more -10

 


12월달 로그 만 찾기

 

12월달 로그만 찾아서 새 문서에 저장하기

egrep '^Dec'  dd | tee Dec.log 


9월, 10월, 11월로 시작하지 않는  로그 찾기
egrep 'sshd[^(Sep|Oct|Nov)]' dd | more -10

 


11월 또는 12월로 시작하지 않는  로그 찾기

아래와 같이 하면 N, o, v, |, D ... 등의 글자를 하나 하나 인식해서 제외해 버린다.

egrep '^[^(Nov|Dec)]' 

왜냐하면 [^ ] 는 문자 클래스 안의 문자를 제외한 나머지를 선택하기 때문이다.

예를 들면 [^abc]d는 ad, bd, cd는 포함하지 않고 ed, fd 등을 포함하는 기능이다.

리눅스에선 다른 방법이 없으므로 -v 옵션을 써서 해결하자.

 

대소문자 구별하지 않고,11월 또는 12월로 시작하지 않는  로그 찾기

15시 49분에 발생된 로그 찾기


15시에 발생한 로그를 최신 시간부터 출력

egrep '\s15' dd |more -10 | sort -r


단어가 disabled 또는 Disabled에 일치하는 행 찾기

egrep '(d|D)isabled' dd  | more -10


점(.)숫자가 포함된 행 찾기 

참고로 뒤에 *을 붙이면 결과가 더 잡다하게 나온다. (실패)

아래와 같은 영문 모를 것도 걸린다.

 

egrep '\.[0-9]' dd  | more -10


행이 ssh2로 끝나는 행 찾기

egrep 's{2}h2$' dd  | more -10


현재 작업 디렉터리안에 있는 파일중에서 내용에 ssh2가 들어 있는 파일명을 출력하기

egrep 'ssh2' ~/*  | more -10


행의 마지막에 숫자가 1개 이상으로 끝나는 행 찾기

egrep '[0-9]$' dd  | more -10

 

행의 시작을 특수문자로 시작하는 행 찾기

소문자 대문자 숫자가 아니면 특수문자인 것을 이용.

egrep '^[^a-z|A-Z|0-9]' dd |wc


공백으로 시작하는 행 찾기

egrep '^\s' dd

 egrep '^[^[:blank:]]' dd


소문자로 시작하는 행 찾기

 egrep '^[a-z]' dd  | more -10


대문자로 시작하는 행 찾기

egrep '^[A-Z]' dd  | more -10


sshd[숫자] 행 찾기

egrep 'sshd\[[0-9]' dd | more -10

egrep 'sshd\[[0-9]+\]' dd | more -10

 

이렇게는 검색이 잘 되지만

egrep 'sshd\[[0-2000]\]' dd | more -10 이렇게는 검색이 안된다.

왜냐하면 한자리씩 검사하는데 0-2000은 한자리가 아니기 때문.

 


IP주소가 192.168. 이 있는 행 찾기

 egrep '192\.168\.' dd  | more -10


192.168, 192.16, 192.0 … 이 포함된 행 찾기

 

ip 주소 찾기

 egrep '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' dd

 

 

'Linux' 카테고리의 다른 글

awk  (0) 2022.12.16
sed (스크립트)  (0) 2022.12.15
VMware 네트워크 새 세팅  (0) 2022.12.13
linux routing (Networking 문제 트러블 슈팅)  (0) 2022.12.06
DHCP Mac Address Filtering  (0) 2022.12.06