Study/리눅스
리눅스 3일차(RegularExpression / grep)
됵이
2022. 7. 17. 14:13
파일 / 디렉터리 패턴 검색 (grep)
grep : 로그파일이나 텍스트 파일에서 특정 문자열을 찾을때 혹은 특정 문자를 포함하는 파일을 찾을때 사용
grep [옵션] [패턴] [파일명]
다른 명령어 | grep [패턴] [파일명]
grep의 3종류
grep : 다중패턴을 검색 정규 표현식 사용 가능
egrep : 정규표현식 패턴으로 검색
fgrep : 문자열 패턴으로 검색 정규 표현식 사용 불가능
grep [OPTION...] PATTERN [FILE...]
-E : PATTERN을 확장 정규 표현식(Extended RegEx)으로 해석.
-F : PATTERN을 정규 표현식(RegEx)이 아닌 일반 문자열로 해석.
-G : PATTERN을 기본 정규 표현식(Basic RegEx)으로 해석.
-P : PATTERN을 Perl 정규 표현식(Perl RegEx)으로 해석.
-e : 매칭을 위한 PATTERN 전달.
-f : 파일에 기록된 내용을 PATTERN으로 사용.
-i : 대/소문자 무시.
-v : 매칭되는 PATTERN이 존재하지 않는 라인 선택.
-w : 단어(word) 단위로 매칭.
-x : 라인(line) 단위로 매칭.
-z : 라인을 newline(\n)이 아닌 NULL(\0)로 구분.
-m : 최대 검색 결과 갯수 제한.
-b : 패턴이 매치된 각 라인(-o 사용 시 문자열)의 바이트 옵셋 출력.
-n : 검색 결과 출력 라인 앞에 라인 번호 출력.
-H : 검색 결과 출력 라인 앞에 파일 이름 표시.
-h : 검색 결과 출력 시, 파일 이름 무시.
-o : 매치되는 문자열만 표시.
-q : 검색 결과 출력하지 않음.
-a : 바이너리 파일을 텍스트 파일처럼 처리.
-I : 바이너리 파일은 검사하지 않음.
-d : 디렉토리 처리 방식 지정. (read, recurse, skip)
-D : 장치 파일 처리 방식 지정. (read, skip)
-r : 하위 디렉토리 탐색.
-R : 심볼릭 링크를 따라가며 모든 하위 디렉토리 탐색.
-L : PATTERN이 존재하지 않는 파일 이름만 표시.
-l : 패턴이 존재하는 파일 이름만 표시.
-c : 파일 당 패턴이 일치하는 라인의 갯수 출력.
정규 표현식
- 특정 규칙을 가진 문자열 집합을 표현하기 위한 형식 언어
- 문자열 패턴 매칭
- 문자열 치환
/^\d{2,3}-\d{3,4}-\d{4}$/gm
#"/"로 패턴의 시작과 끝을 표현
메타문자
메타문자 | 의미 | 예시 | 설명 |
^ | 행의 시작 | grep '^linux' | linux로 시작하는 행 |
$ | 행의 끝 | grep 'linux$' | linux로 끝나는 행 |
\< | 단어의 시작 | grep '\<linux' | linux단어로 시작하는 단어를 포함하는 행 |
\> | 단어의 끝 | grep 'linux\> | linux단어로 끝나는 단어를 포함하는 행 |
. | 임의 모은 문자 종류 하나 | grep 'i...x' | i와 x 사이에 3글자만 들어갈 수 있다. |
? | 문자 하나가 있거나 없거나 | greo 'lin?x' | ? 자리에 문자가 있든 없든 출력 linx도 출력하고 linax도 출력 |
* | 문자가 0개 이상 | grep 'linux*' | linux와 linuxx와 linuxxx등 *전에 오는 문자가 0회 이상인 것을 전부 출력한다. |
| | or기호 | grep 'ab|cd' | ab또는 cd가 들어간 문자를 매칭 |
\ | 특정기호 or 메타 문자를 무시 | grep 'lin \. \x' | lin.x를 검색 |
[] | []안에 문자를 넣어 그중 하나를 매칭 | grep 'li[abcd]' | lia,b,c,d중 하나를 매칭 |
[-] | [-] '-'사이에 문자나 숫자를 넣어 범위 설정 가능 | grep '[a-z]' | 소문자 a부터 z까지 |
[^] | 부정을 의미 , []안에 문자를 제외 하겠다 |
grep 'ab[^cd]' | ab다음에 c,d는 제외 하겠다 |
\<\> | 단어의 시작과 끝 | grep '\<linux\>' | linux라는 정확한 단어가 들어간 것을 매칭 |
a\{n\} | a 문자를n번 반복 | grep 'a\{2\}' | a문자를 2회 반복되는 것을 매칭 |
a\{n,m\} | a문자가 n회 이상m회 이하 | grep 'a\{2,5\}' | a문자가 2회 이상 5회 이하 반복 되는 것을 매칭 |
확장 브래킷
검색을 편하게 하기 위한 단축 상수이다.
[[:alnum:]] | A-Z a-z 0-9 알파벡 문자와 숫자로 이루어진 문자열 |
[[:alpha:]] | A-Z a-z 알파벳 문자 |
[[:blank:]] | \x09 스페이스와 탭 |
[[:cntrl:]] | 컨트롤 제어 문자 |
[[:digit:]] | 0-9숫자 |
[[:graph:]] | !~~공백이 아닌 문자 |
[[:lower:]] | a-z 소문자 |
[[:print:]] | 스페이스 문자를 포함 |
[[:punct:]] | !-/: 등 문장부호 문자 |
[[:space:]] | \t\v\f 모든 공백 문자 |
[[:upper:]] | 대문자 |
[[:xdigit:]] | 16진수에서 사용할 수 있는 문자 |