from Dictionary - Grep
Grep
참조
사전 지식
Regexp
| 메타문자 | 의미 | 예시 | 설명 | ||
|---|---|---|---|---|---|
| ^ | 행의 시작 | $ grep ‘^linux’ | linux로 시작하는 행 | ||
| $ | 행의 끝 | $ grep ‘linux$’ | linux로 끝나는 행 | ||
| \< | 단어의 시작 | $ grep ‘\<linux’ | linux로 시작하는 단어를 포함하는 행 | ||
| \> | 단어의 끝 | $ grep ‘linux\>’ | linux로 끝나는 단어를 포함하는 행 | ||
| . | 임의의 모든 문자 종류 하나 | $ grep ‘l…x’ | l과 x사이에 세글자만 있을 수 있음 | ||
| ? | 문자가 한개가 있거나 없거나 | $ grep ‘lin?x’ | ?에 문자하나가 들어가는 것을 검색 | ||
| * | 문자가 여러개 들어가거나 없거나 | $ grep ‘linux’$ grep ‘lin’$ grep ‘lx’$ grep ‘linux’ | linux를 모두 검색(여러 파일의 이름을 표현할 때 사용하고, 단독으로 * 사용하면 모든 파일을 나타냄) | ||
| | | or 기호 | $ grep ‘ab | cd | ef’ | ab나 cd나 ef 셋 중 하나라도 들어있으면 검색 |
| \() | 특정 기호 or 메타 문자를 무시(문자 그 자체를 나타냄) | $ grep ‘lin\.\x’ | .문자를 대응하는 것이 아니라 lin.x라는 문자를 검색 | ||
| [] | []는 안에 내용을 넣어 그 문자들 중 한문자를 의미 | $ grep ‘linux[123]’ | linux1, linux2, linux3을 검색 | ||
| [0-9], [a-z] | 숫자나 알파벳은 범위로 설정 가능 | $ grep ‘linux[0-9]’ | linux1부터 linux9까지 검색 | ||
| [^] | []안에 있는 ^는 부정을 의미안에 있는 문자를 제외한다는 뜻 | $ grep ‘linux[^1-3]’ | linux1 부터 linux3까지를 제외한 문자 검색 | ||
| \<\> | \<는 단어의 시작\>는 단어의 끝(위에 있는 지시자 합친것) | $ grep ‘\<linux\>’ | linux로 시작하는 단어, linux로 끝나는 단어 검색예를 들어 alinux2와 같이 중간에 linux가 있는 것은 안됨 | ||
| a\{n\} | 문자 a를 n번 반복 | $ grep ‘a\{2\}’ | a 문자가 2번 연속 반복되는 것을 검색 | ||
| a\{n,\} | 문자 a를 적어도 n번 이상 반복 (콤마가 있음) | $ grep ‘a\{2,\}’ | a 문자가 최소한 2번 이상 반복되는 것을 검색 | ||
| a\{m,n\} | 문자 a를 m번 이상 n번 이하로 반복 (반복 범위 지정) | $ grep ‘a\{2,4\}’ | a 문자가 2번 이상 4번 이하로 반복되는 부분 | ||
| \(..\) | 다음 사용을 위해 태그를 붙이는 역할최대 9개까지 사용가능 | $ grep \(linux\)A\1B | linuxA에 \1이 태그되어linuxAlinuxB로 대응 |
출처: https://inpa.tistory.com/entry/LINUX-📚-정규표현식-과-grep-명령어-정복하기-패턴-검색-확장브래킷 [Inpa Dev 👨💻:티스토리]
Bracket
브래킷|의미 :—:|:—: [:alnum:]|A-Z, a-z, 0-9 알파벳 문자와 숫자로 이루어진 문자열 [:alpha:]|A-Z, a-z 알파벳 문자 [:blank:]|\x09 스페이스와 탭 [:cntrl:]|컨트롤 제어 문자 [:digit:]|0-9 숫자 [:graph:]|!-~ 공백이 아닌 문자(스페이스, 제어 문자들을 제외한 문자) [:lower:]|a-z 소문자 [:print:]|graph와 유사하지만 스페이스 문자를 포함 [:punct:]|!-/:-@[-‘{-~ 문장 부호 문자 [:space:]|\t\v\f 모든 공백 문자(newline 줄바꿈, 스페이스, 탭) [:upper:]|A-Z 대문자 [:xdigit:]|16진수에서 사용할 수 있는 숫자
vi 에서 정규표현식으로 검색
/없이$ # 없이로 끝나는 문자열 검색
/...세 # 4개 문자로 구성된 문자열 중 마지막 문자가 “세”로 끝나는 문자열 검색
/o*ve # o로 시작되는 문자부터 ve로 끝나는 모든 문자열 검색
/[Ll]ove # Love, love
grep
grep 은 입력으로 전달된 파일의 내용 혹은 디렉토리에서, 파일 내용이나 파일 이름의 특정 문자열 패턴을 찾고자 할 때 사용하는 명령어다.
grep 은 global / regular expression / print에서 각각의 머릿 글자를 따 온 것이며, find와 함께 리눅스에서 가장 많이 사용되는 명령어 중 하나이다.
| 명령어 | 설명 | 정규 표현식 사용 유무 |
|---|---|---|
| grep | 다중 패턴 | O |
| egrep(grep -e) | 정규 표현식 패턴 | O |
| fgrep(grep -f | 문자열 표현식 패턴 | X |
$ 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 : 파일 당 패턴이 일치하는 라인의 갯수 출력.
예시
# 날짜 기준이 생성일이라고 할 때, 첫 날짜는 검색하고자 하는 날짜, 두번째는 검색하고자 하는 다음날 날짜
$ find . -name *.log -newerct yyyy-MM-dd ! -newerct yyyy-MM-dd -exec grep -Hni '검색어' {} \;
pipe와 사용
# 현재 프로세스를 출력에서 "java"라는 문자열을 포함하는 라인만 표시
$ ps -ef | grep "java"
# 어플리케이션의 로그를 tail 하면서 "error" 문자열을 포함하는 라인 표시
$ tail -f application.log | grep -i "error"
# netstat명령어로 네트워크 상태를 모니터링하는데 그중 tcp만 확인
$ netstat | grep "tcp"
# 어플리케이션 로그중 "error" 문자열을 포함하는 라인을 한 화면씩 표시
$ grep "error" application.log | more
# mylog.txt 파일에서 Apple과 Banana이 있는 문자열들을 탐색
$ cat mylog.txt | grep 'Apple' | grep 'Banana'
find와 사용
$ find . -name "찾고 싶은 파일이름" | xargs grep -n "찾고 싶은 글자"
xargs 의미
파이프 다음에 쓰이는 xargs는 파이프를 통해 넘어온 결과물을 다음 명령어에 매개변수로 던져주는 역할을 한다.
출처: https://inpa.tistory.com/entry/LINUX-📚-정규표현식-과-grep-명령어-정복하기-패턴-검색-확장브래킷 [Inpa Dev 👨💻:티스토리]