쿼카러버의 기술 블로그
Linux Shell Script - grep (와일드카드, 파일 뒤지기, 명령어 결과 파싱, cpu 코어 갯수 확인, 로그 뒤지기 등) 본문
Linux Shell Script - grep (와일드카드, 파일 뒤지기, 명령어 결과 파싱, cpu 코어 갯수 확인, 로그 뒤지기 등)
quokkalover 2021. 7. 22. 18:11타겟:
그냥 명령어들이 궁금한 분들은 Easy Commandlines
더 디테일하게 알아보고 싶으신 분들은 grep in detail 참고
Easy Commandlines
아래와 같은 txt 파일이 있다고 했을 때, grep을 활용해서 원하는 내용을 찾을 수 있음
be_honest.txt
Okay go, go hang your heart on any tree
You can make yourself available to anybody
'Cause every livin' person knows you are a prize
Whichever way you go I'll be easy to find
I don't ask for much, just be honest with me
I don't ask for much, be honest
기본 커맨드 형식
grep {원하는 패턴} {찾고자 하는 파일}
1) 현재 디렉토리 모든 파일에서 문자열 검색
grep "honest" be_honest.txt > FILE.txt에서 "STR" 문자열 검색.
2) 대상 파일에서 문자열 검색
grep "honest" * > 현재 디렉토리 모든 파일에서 "STR" 문자열 검색.
3) 대소문자 구분하지 않고 문자열 검색
grep -i "honest" be_honest.txt > FILE.txt 파일에서 대소문자 구분없이(STR, str) 문자열 검색.
4) 검색 결과 앞에 파일 이름 표시
grep -H "honest" * > "honest"이 포함된 파일 이름 표시.
grep -Hn "honest" * > "honest"이 포함된 파일 이름과 라인 번호 표시.
5) [0-9] 사이 숫자만 변경되는 패턴 찾기
grep step[0-9] * > "step0", "step1", ..., "step9" 패턴을 검색.
6) 실행중인 프로세스 중에 내가 원하는 단어와 매칭되는 프로세스 찾기
ps -ef | grep {원하는 단어}
7) cpu 코어 갯수 찾기
grep -c processor /proc/cpuinfo
Grep in detail
리눅스를 사용하다보면 grep을 사용할 일이 정말 많다.
grep
의 기능 : 간단한 패턴과 매칭되는 행을 텍스트 파일 / stdout 등에서 선택하기
grep
은 "global/regular expresiion/print"의 축약어라고 한다.
= 정규표현식에 의한 패턴 매칭 방식을 사용한다는 의미.
grep
은 패턴과 매칭되는 파일의 행을 찾아 화면에 뿌려준다.
아래와 같은 텍스트가 있다고 해보자
be_honest.txt
Okay go, go hang your heart on any tree
You can make yourself available to anybody
'Cause every livin' person knows you are a prize
Whichever way you go I'll be easy to find
I don't ask for much, just be honest with me
I don't ask for much, be honest
위 be_honest.txt
에서 honest
를 포함하는 행을 찾아보자.
grep honest be_honest.txt
단어를 포함하기만 하면 되면
grep sk be_honest.txt
ask
에는 sk
가 포함되기 때문에 찾아진다.
-w옵션
만약에 특정 단어만을 가진 행을 출력하고 싶으면 grep
명령어에 -w
옵션을 주면 된다.
grep -w sk be_honest.txt
이렇게 입력하면 아무것도 나오지 않는다.
-n옵션
-n
옵션을 붙일 경우 매칭되는 행의 번호를 붙여서 출력해준다.
grep -n sk be_honest.txt
-v옵션
-v옵션을 붙일 경우 매칭되는 Pattern이 존재하지 않는 라인을 선택한다.
와일드카드
와일드 카드란 특정 문자 패턴과 일치하는 파일 이름을 선택할 수있는 특수 문자를 말한다.
{}, ?, *, [] ....
와일드카드 사용 예시
me@linux ~ $ echo 2014-{01,02,03}
2014-01 2014-02 2014-03
me@linux ~ $ echo /usr/*/share
/usr/local/share
grep과 와일드카드
grep의 진정한 힘은 패턴이 와일드 카드를 포함할 수 있다는데서 온다.
정규표현식은 매우 강력한다.
아래 명령어로 문자열 두 번째 위치에 'o'를 포함한 행을 찾을 수 있다.
grep -E '^.o' be_honest.txt
grep과 명령어들 (piping)
/etc/passwd 파일에는 계정 정보들이 들어 있는데,
cat 명령어를 통해서 각 계정 정보가 라인별로 출력이 될텐데,
그중에서 mail 이라는 문자열이 들어간 라인만 필터링해서 출력하고 싶을 때 아래처럼 사용하면 됨
cat /etc/passwd | grep mail
현재 디렉토리에서 c 라는 글자가 들어간 파일 중 java 가 들어간 파일을 제외하고 출력
ls | grep c | grep -v java
참고 자료
http://statkclee.github.io/xwmooc-sc/novice/shell/06-find.html