SRE/Linux Basics

grep(작성 중)

게임이 더 좋아 2022. 12. 2. 13:44
반응형
728x170

정의

Global Regular Expression Print의 약자

모든 명령어와 가장 조합이 잘되는 명령어 중 하나

 

 

기본 포맷

    grep [OPTION...] PATTERN [FILE...]

 

용도

 

 

Pipes로 가장 많이 쓰는 명령어일 것이다.

명령을 실행할 때 조건을 넣어 명령을 실행할 때 많이쓴다.

 

-cpu model 이름 알아내기

아래 예시 결과는 같지만 방법이 다르다.

#1
cat /proc/cpuinfo | grep -i 'Model'

#2
grep -i 'Model' /proc/cpuinfo

이와 같이 명령을 조합해서 쓸 수 있다.

-패키지를 탐색하기 좋은 명령어다.

pattern에 highlight를 주게 된다면

쉽게 파악할 수 있다.

 

파일 명을 찾거나 파일의 일치하는 부분 찾기

#1. 출력 옵션

#해당 파일에서 word 를 포함하는 line을 출력함★★★★★
grep {word} {filename1,filename2, ...}
cat {file} | grep {word}
grep --color {word} {file} 



#해당 내용이 있는 파일 명 출력
grep -H {pattern} *

#해당 파일에서 찾은 패턴 이후로 NUM 번째 라인까지 출력 (after-context)
grep -A {NUM} {pattern} *

#해당 파일에서 찾은 패턴 이전으로 NUM 번째 라인까지 출력(before-context)
grep -B {NUM} {pattern} *

#일치하는 내용이 존재하는 파일 명만 출력★★★★★
grep -l {pattern} *

#일치하는 문자들이 있을 때만 출력(only)★★★★★
grep -o {pattern} *

#search_directory 하위 파일 중에 파일 내용이 search_string 이 있는 라인 출력과 해당 파일 명 출력★★★
find search_directory -type f -exec grep search_string /dev/null {} \;

#위에서 파일 명만 출력★★★
find search_directory -type f -exec grep -l search_string /dev/null {} \;

#모든 현재 디렉토리 전체에서 해당 패턴과 일치하는 파일 명 출력★★
grep -R 'httpd' .

#해당 파일에서 해당 패턴이 몇 번이나 등장하는지 출력★★
grep -c 'nixcraft' frontpage.md

 

 

파일에서 정규표현식을 이용하여 필요한 부분 파싱 및 연산★★★★

#2. 검색 제어, 연산

#정규식 사용
#1. abc 뒤에 3자리 숫자 출력
echo "abc-123 test" | grep -E abc-[0-9]{3}
#2. ssh 접속 시도 IP 추출하여 IP 차단
# 해당 로그 : Bad protocol version identification '\003' from 141.98.81.34 port 59559 에서 IP 파싱
grep "Bad pro" /var/log/secure*|grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"|grep -v '\\'|uniq > drop-ip.txt
#방화벽에서 차단
sudo bash firewallcmd-drop-client.sh -i 1.2.3.4,11.22.33.44
sudo bash firewallcmd-drop-client.sh -f drop-ip-list

 

정규 표현식

. 1개의 문자 매치 (정확히 1개의 문자와 매치)
* 앞 문자가 0회 이상 매치
{n} 앞 문자가 정확히 n회 매치
{n,m} 앞 문자가 n회 이상 m회 이하 매치
[ ] 대괄호에 포함된 문자 중 한개와 매치
[^ ] 대괄호 안에서 ^뒤에 있는 문자들을 제외
[ - ] 대괄호 안 문자 범위에 있는 문자들 매치
() 표현식을 그룹화
^ 문자열 라인의 처음
$ 문자열 라인의 마지막
? 앞 문자가 0 또는 1회 매치 (확장 정규 표현식)
+ 앞 문자가 1회 이상 매치 (확장 정규 표현식)
| 표현식 논리 OR (확장 정규 표현식)

 

더보기

대상 파일에서 문자열 검색 grep "STR" [FILE]
현재 디렉토리 모든 파일에서 문자열 검색 grep "STR" *
특정 확장자를 가진 모든 파일에서 문자열 검색 grep "STR" *.ext
대소문자 구분하지 않고 문자열 검색 grep -i "STR" [FILE]
매칭되는 PATTERN이 존재하지 않는 라인 선택 grep -v "STR" [FILE]
단어(Word) 단위로 문자열 검색 grep -w "STR" [FILE]
검색된 문자열이 포함된 라인 번호 출력 grep -n "STR" [FILE]
하위 디렉토리를 포함한 모든 파일에서 문자열 검색 grep -r "STR" *
최대 검색 결과 갯수 제한 grep -m 100 "STR" FILE
검색 결과 앞에 파일 이름 표시 grep -H "STR" *
문자열 A로 시작하여 문자열 B로 끝나는 패턴 찾기 grep "A.*B" *
0-9 사이 숫자만 변경되는 패턴 찾기 grep "STR[0-9]" *
문자열 패턴 전체를 정규 표현식 메타 문자가 아닌
일반 문자로 검색하기 grep -F "*[]?..." [FILE]
정규 표현식 메타 문자를 일반 문자로 검색하기 grep "\*" [FILE]
문자열 라인 처음 시작 패턴 검색하기 grep "^STR" [FILE]
문자열 라인 마지막 종료 패턴 검색하기 grep "$STR" [FILE]

 

 

 


 

Options

 

엄청 많다.

사용이 그래도 되는 명령어들로 뽑자면

 

-E 확장 정규표현식 사용
-F 고정 패턴 매칭
-e 패턴 매칭
-f 파일에 기록된 내용을 PATTERN으로 사용
-w 단어 단위로 매칭
-x 라인 단위로 매칭
-h 검색 결과 출력 시, 파일 이름 무시
-r 하위 디렉토리 탐색
-l 패턴이 존재하는 파일 이름만 표시
-c 파일 당 패턴이 일치하는 라인의 갯수 출력
--color 패턴에 매칭하는 부분 하이라이트
-o 매치되는 문자열만 표시
-i 대/소문자 무시
-n 검색 결과 출력 라인 앞에 라인 번호 출력
-H 검색 결과 출력 라인 앞에 파일 이름 표시
-q 검색 결과 출력하지 않음
-L 패턴이 존재하지 않은 파일 이름만 표시
-R 심볼릭 링크를 따라서 모든 하위 디렉토리 탐색
-z 라인을 newline이 아닌 NULL로 구분
-v 매칭되는 패턴이 존재하지 않는 라인 선택

 

 


참고

최근에 Rust로 만들어진 ripgrep이 더 빠른 성능을 자랑한다고 함

 

참고링크

https://kb.iu.edu/d/abnd

https://wiki.daumkakao.com/pages/resumedraft.action?draftId=1051605219&draftShareId=57b9f37b-88db-41fd-b1fa-8f44ab87e5a6&

https://www.cyberciti.biz/faq/howto-use-grep-command-in-linux-unix/

https://www.lesstif.com/lpt/grep-ripgrep-119963754.html

 

 

728x90
반응형
그리드형

'SRE > Linux Basics' 카테고리의 다른 글

PackageManager  (0) 2022.12.03
tar  (0) 2022.12.02
rsync, 원격으로 동기화  (0) 2022.12.02
cron, 크론탭  (0) 2022.12.02
cut, 문자열 자르기  (0) 2022.12.02