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진수에서 사용할 수 있는 문자