목차
1. grep 명령어
[개요]
패턴: 찾을 문자열 또는 정규 표현식
# grep [옵션] [패턴] [파일명]
• global / regular expression / print
• 파일에서 문자열이나 지정한 패턴(정규 표현식)을 이용해 원하는 내용이 들어간 행을 찾아 출력하는 명령어
• 리다이렉션 (>,>>)과 파이프라인 ( | )을 같이 사용해서 쉽게 원하는 내용을 따로 출력하거나 저장할 수 있습니다.
• grep의 변형 명령어로 egrep과 fgrep이 있습니다.
1.1. grep 옵션
1.1.1. Regexp selection and interpretation
Regexp selection and interpretation(정규식 선택 및 해석):
-E, --extended-regexp 패턴을 확장 정규 표현식으로 설정(=egrep)
-F, --fixed-strings 패턴을 정규 표현식(RegEx)이 아닌 일반 문자열로 설정
-G, --basic-regexp 패턴을 기본 정규 표현식으로 설정
-P, --perl-regexp 패턴을 Perl 정규 표현식으로 설정
-e, --regexp=PATTERN 하나 이상의 탐색 패턴을 설정
-f, --file=FILE 파일에 포함된 내용을 패턴으로 설정 -> grep -f aapl.txt stock.txt
-i, --ignore-case 대소문자 무시
-w, --word-regexp 패턴이 단어 단위로 일치하도록 설정 -> grep -w aapl stock.txt, grep -w aa stock.txt
-x, --line-regexp 패턴이 라인 단위로 일치하도록 설정
-z, --null-data 라인을 newline(\n)이 아닌 NULL(\0)로 구분하도록 설정
1.1.2. Miscellaneous
Miscellaneous(기타):
-s, --no-messages 오류 메시지 숨기기
-v, --invert-match 패턴이 포함되지 않는 행 출력
-V, --version 버전 정보 표시 및 종료
--help 도움말 텍스트 표시 및 종료
1.1.3. Output control
Output control(출력 제어):
-m, --max-count=NUM 최대 검색 결과 행 개수 제한
-b, --byte-offset 패턴과 일치하는 줄의 시작점 출력
-n, --line-number 줄의 번호와 내용을 같이 출력
--line-buffered 모든 라인에 플러시 출력
-H, --with-filename 검색 결과 출력 시 라인 앞에 파일 이름 출력
-h, --no-filename 검색 결과 출력 시, 파일 이름 출력 안 함
--label=LABEL LABEL을 표준 입력 파일 이름 접두사로 사용
-o, --only-matching 패턴과 일치하는 행만 표시
-q, --quiet, --silent 검색 결과 출력하지 않음
-a, --text 바이너리 파일(. bin)을 텍스트 파일처럼 처리
-I 바이너리 파일(.bin)은 검사하지 않음
-d, --directories=ACTION 디렉토리 처리 방식 설정(read, recurse, skip)
-D, --devices=ACTION 장치 파일 처리 방식 설정(read, skip)
-r, --recursive 하위 디렉토리 포함하여 출력
-R, --dereference-recursive 심볼릭 링크를 따라가며 모든 하위 디렉토리 포함하여 출력
--include=FILE_PATTERN FILE_PATTERN과 일치하는 파일만 검색
--exclude=FILE_PATTERN FILE_PATTERN과 일치하는 파일 및 디렉토리 건너뛰기
--exclude-from=FILE FILE의 모든 파일 패턴과 일치하는 파일 건너뛰기
--exclude-dir=PATTERN PATTERN과 일치하는 디렉토리는 건너뛰기
-L, --files-without-match 패턴이 존재하지 않는 파일 이름만 출력
-l, --files-with-matches 패턴이 존재하는 파일 이름만 출력
-c, --count 파일 당 패턴이 일치하는 라인의 개수 출력
-T, --initial-tab 탭을 정렬
-Z, --null 파일 이름 뒤에 0바이트 인쇄
1.1.4. Context control
Context control(문맥 제어):
-B, --before-context=NUM 특정패턴 위 추가로 여러 행 출력
-A, --after-context=NUM 특정패턴 아래 추가로 여러 행 출력
-C, --context=NUM 특정패턴 위아래 추가로 여러 행 출력
1.2. 정규 표현식
• 확장 정규식은 grep -E 또는 egrep을 이용하면 사용 할 수 있습니다.
• 정규 표현식을 grep명령어에서 활용할 경우 -e 옵션을 사용해도되고 안 해도 됩니다.
2. grep 예제(option 활용)
• 실습을 위해 여러 텍스트 파일을 준비합니다.
경로: ~/test [stock1.txt]
# cat stock1.txt
NASDAQ aapl price is $148.97
NASDAQ msft price is $295.71
NASDAQ tsla price is $736.27
NYSEARCA spy price is $445.44
NYSEARCA sso price is $128.66
NYSEARCA spxl price is $119.02
NYSEARCA upro price is $126.65
NASDAQ qqq price is $376.59
NYSEARCA qld price is $80.66
NASDAQ tqqq price is $145.55
NYSE net price is $127.48
NYSE cpng price is $29.98
경로: ~/test [stock2.txt]
# cat stock2.txt
KOSPI samsung electronics price is \75,300
KOSPI naver price is \410,000
KOSPI kakao price is \130,000
KOSDAQ kakaogames price is \73,800
KOSDAQ Seegene price is \63,200
경로: ~/test [ny.txt]
# cat ny.txt
^NY
경로: ~/test/test2 (하위 경로) [stock3.txt]
# cat stock3.txt
NASDAQ fb price is $364.72
NASDAQ mrna price is $430.05
NYSE pfe price is $43.89
NYSE ma price is $343.04
2.1. 특정 파일에서 패턴 검색
# grep "패턴" 파일명
# grep "NASDAQ" stock1.txt
NASDAQ aapl price is $148.97
NASDAQ msft price is $295.71
NASDAQ tsla price is $736.27
NASDAQ qqq price is $376.59
NASDAQ tqqq price is $145.55
# grep "^NY" stock1.txt
NYSEARCA spy price is $445.44
NYSEARCA sso price is $128.66
NYSEARCA spxl price is $119.02
NYSEARCA upro price is $126.65
NYSEARCA qld price is $80.66
NYSE net price is $127.48
NYSE cpng price is $29.98
2.2. 여러 파일에서 패턴 검색
# grep "패턴" 파일명1 파일명 2...
# grep "DAQ" stock1.txt stock2.txt test2/stock3.txt
stock1.txt:NASDAQ aapl price is $148.97
stock1.txt:NASDAQ msft price is $295.71
stock1.txt:NASDAQ tsla price is $736.27
stock1.txt:NASDAQ qqq price is $376.59
stock1.txt:NASDAQ tqqq price is $145.55
stock2.txt:KOSDAQ kakaogames price is \73,800
stock2.txt:KOSDAQ Seegene price is \63,200
test2/stock3.txt:NASDAQ fb price is $364.72
test2/stock3.txt:NASDAQ mrna price is $430.05
2.3. 특정 디렉터리 내 모든 파일에서 패턴 검색
1. 현재 디렉토리 전체 파일
# grep "패턴" *
2. 현재 디렉토리 전체 파일 및 하위 디렉토리 파일
# grep -r "패턴" *
# grep "a" *
stock1.txt:NASDAQ aapl price is $148.97
stock1.txt:NASDAQ tsla price is $736.27
stock2.txt:KOSPI samsung electronics price is \75,300
stock2.txt:KOSPI naver price is \410,000
stock2.txt:KOSPI kakao price is \130,000
stock2.txt:KOSDAQ kakaogames price is \73,800
# grep -r "a" *
stock1.txt:NASDAQ aapl price is $148.97
stock1.txt:NASDAQ tsla price is $736.27
stock2.txt:KOSPI samsung electronics price is \75,300
stock2.txt:KOSPI naver price is \410,000
stock2.txt:KOSPI kakao price is \130,000
stock2.txt:KOSDAQ kakaogames price is \73,800
test2/stock3.txt:NASDAQ mrna price is $430.05
test2/stock3.txt:NYSE ma price is $343.04
2.4. 대소문자 구분하지 않고 패턴 검색
# grep -i "패턴" 파일명
# grep "nas" stock1.txt
결과가 없음
# grep -i "nas" stock1.txt
NASDAQ aapl price is $148.97
NASDAQ msft price is $295.71
NASDAQ tsla price is $736.27
NASDAQ qqq price is $376.59
NASDAQ tqqq price is $145.55
2.5. 1개 이상의 패턴을 사용해 여러 가지 패턴 검색
1. e 옵션 여러 개 사용
# grep -e "패턴 1" -e "패턴 2" 파일명
2. E 옵션 사용
# grep -E "패턴 1|패턴 2" 파일명
3. egrep 사용
# egrep "패턴1|패턴2" 파일명
1. -e 옵션 여러 개 사용
# grep -e "aapl" -e "spy" stock1.txt
NASDAQ aapl price is $148.97
NYSEARCA spy price is $445.44
2. -E 옵션을 사용해 확장 정규식 사용
# grep -E "aapl|spy" stock1.txt
NASDAQ aapl price is $148.97
NYSEARCA spy price is $445.44
3. egrep 사용
# egrep "aapl|spy" stock1.txt
NASDAQ aapl price is $148.97
NYSEARCA spy price is $445.44
2.6. 파일에 포함된 내용으로 검색
# grep -f 패턴으로 사용할 파일명 파일명
# cat ny.txt
^NY
NY로 시작하는 패턴 검색
# grep -f ny.txt stock1.txt
NYSEARCA spy price is $445.44
NYSEARCA sso price is $128.66
NYSEARCA spxl price is $119.02
NYSEARCA upro price is $126.65
NYSEARCA qld price is $80.66
NYSE net price is $127.48
NYSE cpng price is $29.98
2.7. 단어 단위로 패턴 검색
# grep -w "패턴" 파일명
# grep -w "NAS" stock1.txt
단어 단위라 결과가 나오지 않음
# grep -w "NASDAQ" stock1.txt
NASDAQ aapl price is $148.97
NASDAQ msft price is $295.71
NASDAQ tsla price is $736.27
NASDAQ qqq price is $376.59
NASDAQ tqqq price is $145.55
2.8. 특정 확장자 파일만 패턴 검색
# grep "패턴" *.파일확장자
# grep "[08]$" *.txt
stock1.txt:NYSE net price is $127.48
stock1.txt:NYSE cpng price is $29.98
stock2.txt:KOSPI samsung electronics price is \75,300
stock2.txt:KOSPI naver price is \410,000
stock2.txt:KOSPI kakao price is \130,000
stock2.txt:KOSDAQ kakaogames price is \73,800
stock2.txt:KOSDAQ Seegene price is \63,200
2.9. 비어있는 행 삭제 출력
# grep -v '^[[:space:]]*$' 파일명
# grep -v '^[[:space:]]*$' stock1.txt
NASDAQ aapl price is $148.97
NASDAQ msft price is $295.71
NASDAQ tsla price is $736.27
NYSEARCA spy price is $445.44
NYSEARCA sso price is $128.66
NYSEARCA spxl price is $119.02
NYSEARCA upro price is $126.65
NASDAQ qqq price is $376.59
NYSEARCA qld price is $80.66
NASDAQ tqqq price is $145.55
NYSE net price is $127.48
NYSE cpng price is $29.98
2.10. 특정 패턴이 존재하지 않는 행 검색
# grep -v "패턴" 파일명
"NASDAQ"과 빈 행을 가지고 있지 않은 행 검색
# grep -v -E "NASDAQ|^[[:space:]]*$" stock1.txt
또는
# egrep -v "NASDAQ|^[[:space:]]*$" stock1.txt
NYSEARCA spy price is $445.44
NYSEARCA sso price is $128.66
NYSEARCA spxl price is $119.02
NYSEARCA upro price is $126.65
NYSEARCA qld price is $80.66
NYSE net price is $127.48
NYSE cpng price is $29.98
2.11. 최대 검색 행 제한 검색
# grep -m 최대 검색 개수 "패턴" 파일명
# grep -m 2 "NASDAQ" stock1.txt
NASDAQ aapl price is $148.97
NASDAQ msft price is $295.71
# grep -m 3 "NASDAQ" stock1.txt
NASDAQ aapl price is $148.97
NASDAQ msft price is $295.71
NASDAQ tsla price is $736.27
2.12. 특정 패턴 행 및 주변 행 출력
1. 특정 패턴 행 및 위로 n행 포함 출력(Before)
# grep -B n "패턴" 파일명
2. 특정 패턴 행 및 아래로 n행 포함 출력(After)
# grep -A n "패턴" 파일명
2. 특정 패턴 행 및 위아래로 n행 포함 출력(Context)
# grep -C n "패턴" 파일명
spxl 위로 2행 포함 출력(Before)
# grep -B 2 "spxl" stock1.txt
NYSEARCA spy price is $445.44
NYSEARCA sso price is $128.66
NYSEARCA spxl price is $119.02
spxl 위로 1행 포함 출력(After)
# grep -A 1 "spxl" stock1.txt
NYSEARCA spxl price is $119.02
NYSEARCA upro price is $126.65
spxl 위 아래로 1행 포함 출력(Context)
# grep -C 1 "spxl" stock1.txt
NYSEARCA sso price is $128.66
NYSEARCA spxl price is $119.02
NYSEARCA upro price is $126.65
2.13. 패턴이 존재하는, 존재하지 않는 파일명 출력
1. 해당 패턴이 존재하는 파일명 출력
# grep -l "패턴" 파일명
2. 해당 패턴이 존재하지 않는 파일명 출력
# grep -L "패턴" 파일명
패턴이 존재하는 파일 이름만 출력(-l)
# grep -lr "NASDAQ" *
stock1.txt
test2/stock3.txt
# grep -lr "KOSPI" *
stock2.txt
패턴이 존재하지 않는 파일 이름만 출력(-L)
# grep -Lr "NASDAQ" *
ny.txt
stock2.txt
# grep -Lr "KOSPI" *
ny.txt
stock1.txt
test2/stock3.txt
2.14. 라인 번호 포함한 패턴 검색
# grep -n "패턴" 파일명
# grep -nr "NASDAQ" *
stock1.txt:1:NASDAQ aapl price is $148.97
stock1.txt:2:NASDAQ msft price is $295.71
stock1.txt:3:NASDAQ tsla price is $736.27
stock1.txt:10:NASDAQ qqq price is $376.59
stock1.txt:12:NASDAQ tqqq price is $145.55
test2/stock3.txt:1:NASDAQ fb price is $364.72
test2/stock3.txt:2:NASDAQ mrna price is $430.05
2.15. 파일 포함, 포함하지 않는 패턴 검색
1. 파일명 출력
# grep -H "패턴" 파일명
2. 파일명 출력하지 않음
# grep -h "패턴" 파일명
파일명 포함
# grep -Hr "NASDAQ" *
stock1.txt:NASDAQ aapl price is $148.97
stock1.txt:NASDAQ msft price is $295.71
stock1.txt:NASDAQ tsla price is $736.27
stock1.txt:NASDAQ qqq price is $376.59
stock1.txt:NASDAQ tqqq price is $145.55
test2/stock3.txt:NASDAQ fb price is $364.72
test2/stock3.txt:NASDAQ mrna price is $430.05
파일명 포함하지 않음
# grep -hr "NASDAQ" *
NASDAQ aapl price is $148.97
NASDAQ msft price is $295.71
NASDAQ tsla price is $736.27
NASDAQ qqq price is $376.59
NASDAQ tqqq price is $145.55
NASDAQ fb price is $364.72
NASDAQ mrna price is $430.05
2.16. 파일 당 패턴이 일치하는 라인의 개수 출력
# grep -c "패턴" 파일명
# grep -cr "NASDAQ" *
ny.txt:0
stock1.txt:5
stock2.txt:0
test2/stock3.txt:2
'OS > Linux' 카테고리의 다른 글
[Linux] 리눅스 프로세스 상태 확인하기 - ps (0) | 2021.09.20 |
---|---|
[Linux] 리눅스 원하는 파일 찾기 - find (0) | 2021.09.19 |
[Linux] vi,vim 에디터 없이 파일 수정하기 - echo, cat, sed (1) | 2021.09.11 |
[Linux] iptables 특정 포트 열기 / 닫기 (iptables 사용법) (0) | 2021.09.05 |
[Linux] CentOS7 Apache 설치 (아파치 웹 서버) (0) | 2021.08.11 |