grepcommand) – Linux 문자열 검색 Linux grep 명령어 사용법. (Linux)
grep 명령어.
grep는 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자 할 때 사용하는 명령어입니다. 리눅스에서 가장 많이 사용되는 명령어 중 하나입니다.
하지만 grep 명령이 문자열을 찾는 기능을 수행한다고 해서 단순히 문자열의 일치 여부를 검사하는 것은 아닙니다. 문자열이 같거나(equal)만 검사하는 수준을 넘어 훨씬 복잡하고 다양한 방식으로 그리고 매우 효율적으로 문자열을 찾는 기능을 제공합니다. 이는 grep가 파일의 문자열을 검색할 때 단순한 문자열 매칭이 아닌 정규 표현식(Regular Expression)에 의한 패턴 매칭(Pattern Matching) 방식을 사용하기 위함입니다.1.1 정규 표현식(Regular Expression) 정규 표현식(Regular Expression)이란 특정 규칙을 가진 문자열 집합을 표현하기 위한 형식 언어로, 주로 문자열 패턴 매칭을 검사하거나 문자열을 대체하기 위해 사용됩니다.
문자열 검색에 정규 표현식을 적용하면 지정된 문자열의 문자가 단순히 “같은지(equal)” 여부가 검사되는 것이 아니라 정규 표현식 규칙에 매칭(Matching)되는지 검사됩니다.
예를 들어 단순 문자열 검색에서 ‘*’는 말 그대로 ‘*’를 의미하기 때문에(‘*’==’*’)는 성립하지만(‘A’==’*’)은 성립되지 않습니다. 그러나 정규 표현식에서 ‘*’는 0개 이상의 모든 문자를 의미하므로(“*”==”*”)뿐만 아니라(“A”==”*”)도 TRUE로 판단됩니다.
정규 표현식을 모두 설명하기엔 지면이 많이 부족하기 때문에 여기서는 정규 표현식을 작성할 때 사용되는 메타문자(Meta Character)에 대해서만 간단히 정리합니다.
메타 문자(MetaCharacter) 설명.하나의 문자 성냥 (정확하게 하나의 문자와 성냥) *앞문자가 0회이상 성냥 {n}앞문자가 정확하게 n회성냥 {n,m}앞문자가 n회이상 m회이하 성냥 []대괄호에 포함된 문자중 하나와 성냥 [^]대괄호안의 문자제외 [-]대괄호안의 문자범위에 있는 문자성냥 ( ) 표현식을 그룹화^문자열라인의 첫 번째 $문자열 라인의 마지막?앞글자가 0 또는 1회 매치(확장 정규 표현식)+앞글자가 1회 이상 매치(확장 정규 표현식)|표현식 논리 OR(확장 정규 표현식) 2.grep 명령어 옵션.grep 명령에서 사용할 수 있는 옵션은 다음과 같습니다.(grep 명령에 대한 보다 자세한 옵션은 “grep-help” 명령에서 확인할 수 있습니다.
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(
)가 아닌 NULL(-b: 패턴이 매치된 각 라인(-o를 사용할 경우 문자열)의 바이트 오프셋 출력.-n: 검색결과 출력라인 앞에 라인번호 출력.- H: 검색 결과의 출력 라인 앞에 파일명 표시. -h: 검색결과 출력 시 파일명 무시.- o: 성냥할 문자열만 표시. – q: 검색 결과 출력하지 말 것.- a: 이진 파일을 텍스트 파일처럼 처리. – I: 이진 파일은 검사하지 말 것.-d: 디렉토리 처리 방식 지정. (read, recurse, skip) – D: 스페셜 파일 처리 방식 지정. (read, skip) – r: 하위 디렉토리 탐색. – R: 심벌리 클링크를 통해 모든 하위 디렉토리 탐색. – L: PATTERN이 존재하지 않는 파일명만 표시. – l: 패턴이 존재하는 파일명만 표시. – c: 파일, 당 패턴이 일치하는 라인의 개수 출력. 3. grep 명령 사용의 예.grep를 사용하여 파일에서 문자열을 검색하는 방법은 아래와 같습니다.
$ grep [OPTION] [PATTERN] [FILE]
아래는 “FILE.txt”의 내용으로 “PAT”라는 문자열을 검색하고, 문자열이 존재하는 라인을 출력의 예입니다. 기본적으로 대 소문자를 구분한다는 점에 주의하세요.
$cat FILE.txtgrep searches for PATTERNS in each FILE.PATTERNS is one or patterns separated by newline characters.And grep prints each line that matches a pattern.$grep”PAT”FILE.txtgrep searches for PATTERNS in each FILE.PATTERNS is one or patterns separated by newline characters. 잘 쓴 grep명령어 사용의 예는 아래와 같습니다. 각 항목의 링크를 선택하면 좀 더 자세한 설명과 사용의 예를 확인할 수 있습니다.
grep사용 예 명령어 옵션 대상 파일에서 문자열 검색 grep”STR”[FILE]현재 디렉토리 모든 파일에서 문자열 검색 grep”STR”*. ext대 소문자 구분 없이 문자열 검색 grep-i”STR”[FILE]매칭 되는 PATTERN이 존재하지 않는 라인 선택 grep-v”STR”[FILE]단어(Word)단위로 문자열 검색 grep-w”STR”[FILE][FILE][FILE]매칭 된 문자열을 포함한 문자열이 포함된 문자열이 포함된 문자열 100″STR”FILE검색 결과 앞에 파일 이름 표시 grep-H”STR”*문자열 A에서 시작하는 문자열 B에서 끝난 패턴 찾아 grep”A.*B”*0-9사이의 숫자만 변경되는 패턴 찾아 grep”STR[0-9]*문자열 패턴 전체를 정규표현식 메타 문자가 아닌 일반 문자로 검색한 grep-F”*[FILE]정규 표현식 메타 문자를 일반 문자로 검색한 grep”*”[FILE]문자열 라인 최초의 패턴 검색하는[FILE]grep명령에 문자열과 파일 이름을 지정하고 파일에서 문자열을 검색할 수 있습니다. 이때 문자열 검색 결과는 문자열이 포함된 라인 단위로 출력됩니다.$grep”STR”FILE1.txt>FILE.txt에서 “STR”문자열 검색.$$cat FILE1.txtgrep searches for PATTERNS in each FILE.PATTERNS is one or patterns separated by newline characters.And grep prints each line that matches a pattern.
$$grep”PAT”FILE.txtgrep searches for PATTERNS in each FILE.PATTERNSisoneorpatternssparatedbynewlinecharacters.3.2현재 디렉토리 모든 파일에서 문자열 검색 파일 이름에 “*”문자를 사용하고 현재 디렉토리에 있는 모든 파일에서 문자열을 검색할 수 있습니다. 단, 현재 디렉토리에 포함되는 하위 디렉토리에 있는 파일은 탐색하지 않습니다.(하위 디렉토리를 탐색하려면-r옵션 사용.)$grep”STR”*>현재 디렉토리 모든 파일에서 “STR”문자열 검색.$lsFILE1.txtFILE2.txt
$$grep”PAT”*FILE1.txt:grep searches for PATTERNS in each FILE.FILE1.txt:PATTERNS is one or patterns separated by newline characters.FILE2.txt:grepsearchesforPATTERNSineachFILE.FILE2.txt:PATTERNSisoneorpatternsseparatedbynewlinecharacters.3.3특정 확장자를 가진 모든 파일에서 문자열 검색 파일 이름 확장자 앞에 “*”문자를 이용하여 특정 확장자를 가진 모든 파일에서 문자열을 검색할 수 있습니다.$grep”STR”*. ext>ext확장자를 가진 파일에서 “STR”문자열 검색.$lsA.cA.hB.h$grep”include”*. hA.h:#include<stdio.h>B.h:#include<string.h”3.4 큰 문자열 검색 grep명령에 “-i”옵션을 사용하는 문자열을 검색할 수 있습니다.grep-i”STR”FILE.txt>FILE.txt파일에서 대 소문자 구별 없이(STR, str)문자열 검색.$$cat FILE1.txtgrep searches for PATTERNS in each FILE.PATTERNS is one or patterns separated by newline characters.And grep prints each line that matches a pattern.
$ $grep-i”Pat” FILE 1.txtgrep searches for PATTERNS in each FILE.PATTERNSisoneorpatternssparated bynewline characters. Andgrepprint seachlinethatmatchesapattern.3.5 매칭되는 PATTERN이 존재하지 않는 라인 선택일 경우에는 문자열이 채워진다.