쿼카러버의 기술 블로그

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

Comments