[유닉스/리눅스] 파일내용 찾기 명령어
: grep, egrep, fgrep
1. grep
명령어
|
설명
|
grep [option] pattern file
grep [옵션] 파일에서찾을내용(패턴) 파일명 |
패턴과 일치하는 값을같는 파일의 라인 내용이 출력.
[옵션] -i : 대소문자 무시
-w : 정확하게 일치하는 한 단어
-v : 키워드 제외(not)
-r : 디렉토리에서 검색가능 > 파일 경로와 라인 값을 출력해준다.
-A num : 일치하는 패턴 아래로 num값 만큼
-B num : 위로
-C num : 위 아래로
|
※ pattern 검색시 정규 표현식을 사용할 수 있다.
* 정규 표현식 *
^ : 패턴의 시작 지정
$ : 패턴의 끝 지정
. : 한 글자 대체 (특수문자, 띄어쓰기도 포함)
.* : zero or more(유닉스는 *) 없는 것부터 무한대
[] : 글자를 포함하는 문자 범위 지정
[^] : 글자를 제외하는 문자 범위 지정
ex) 'c.*t' //c와 t사이에 아무것도 없는것 부터 모든 글자 개수 상관 없이 들어갈 수 있다.
ex) 'c[a-z]'t //c와 t사이에 a-z까지의 글자 1개가 들어갈 수 있다.
ex) 'c[a-zA-Z0-9]'t //c와 t사이에 알파벳 소문자a-z, 대문자 A-Z, 숫자0-9까지 1글자가 들어갈 수 있다.
2. egrep & fgrep
명령어 | 설명 |
egrep | - 확장 정규식을 통해서 grep에서 나타낼 수 없는 패턴 등을 표현한다. - 예를들어, 'or' 기능을 가진다. (| -pipe) |
fgrep | - grep에서는 의미로 사용되는 메타 문자들을 단순 문자로 인식가능하다. (^,$,[,]) |
여러개를 한꺼번에 검색할때 egrep 명령어를 이용.
grep에서 egrep과 같은 효과를 내기 위해서는 -e 옵션을 이용하면 가능하다.
ex) egrep 'student|user|root' /etc/passwd
ex) grep -e 'student' -e 'user' -e 'root' /etc/passwd
리눅스에서 사용하는 모든 문자열을 \을 이용하여서 우회 가능. (우회는 1번에 1글자만 가능)
ex> grep '^a' test
ex> grep '\^a' test
* :전부를 뜻함.
[실습해보기]
1. /etc/passwd 파일에서 root 내용을 검색하시오.
[root@localhost ~]# grep 'root' /etc/passwd
2. /etc/passwd 파일에서 nologin이 뒤에 오는 내용을 검색하시오.
[root@localhost ~]# grep 'nologin$' /etc/passwd
3. /etc/passwd 파일에서 no로 시작하는 단어가 있는 라인을 검색하시오
[root@localhost ~]# grep '^no' /etc/passwd
4. /etc/passwd 파일에서 s로 시작하고 t로 끝나는 8글자 단어로 시작하는 라인을 검색하시오.
[root@localhost ~]# grep '^s......n' /etc/passwd
5. /etc/passwd 파일에서 sh으로 끝나는 라인을 검색하시오.
[root@localhost ~]# grep 'sh$' /etc/passwd
6. /etc/passwd 파일에서 system이 들어간 라인 위로 5줄을 출력하시오.
[root@localhost ~]# grep -B 5 'system' /etc/passwd
option
-A num; after
-B num; before
-C num ; center
7. /etc/passwd n으로 시작해서y로 끝나는 모든 패턴을 검색하시오.
[root@localhost ~]# grep 'n.*y' /etc/passwd
8. /etc/passwd bash가 들어간 라인을 제외하고 출력하시오.
[root@localhost ~]# grep -v 'bash' /etc/passwd
9. 전화번호 패턴을 찾는다고 하면 어떻게 설정하면 될까요?
(조건 : 01로 시작하고 전화번호 형식 XXX-XXXX-XXXX의 패턴)
[root@localhost ~]# grep '01[0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' 파일명
10. /var/log/messages 에서 8월 9일 9시 부터 10시 59분까지의 내용을 검색 하시오.
[root@localhost ~]# grep '^Aug 9 [01][09]:[0-5][0-9]' /var/log/messages
11. /etc/sudoers 파일에서 주석 부분을 제외하고 출력. (주석은 앞에 '#'이 붙어 있음)
[root@localhost ~]# grep -v '^#' /etc/sudoers
grep -i 'daemon' /etc/passwd
13. /etc/passwd 에서 root 단어가 있는 패턴만 검색
grep -w 'root' /etc/passwd
14. /user/include/boost 에서 happy 패턴 검색
grep -r 'happy' /user/include/boost/
15. /etc/passwd 에서 root와 sshd패턴 동시에 검색 (2가지 방법모두 사용해 볼것)
egrep '(root|sshd)' /etc/passwd
grep -e 'root' -e 'sshd' /etc/passwd
16. /etc/shadow 에서 . 자체를 검색하시오 (2가지 방법 모두 사용해 볼것)
fgrep '.' /etc/shadow
grep '\.' /etc/shadow
참고) grep '.' /etc/shadow를 하면 모든 것이 검색결과로 출력됨.
17. /etc 디렉토리 경로에서 'root'라는 문자열이 있는 모든 파일 검색 ★★
grep -r 'root' /etc/*
결과 : 검색 결과가 있는 파일의 경로와, 해당 패턴이 있는 줄이 검색