Skip to content

Linux 기본명령어 grep #
Find similar titles

Structured data

Category
Programming

리눅스 기본명령어 - grep #

grep 명령은 파일 내에서 지정한 패턴이나 문자열을 찾은 후에, 그 패턴을 포함하고 있는 모든 행을 표준 출력해 준다. 물론, 한 디렉토리 내에서 지정한 패턴을 포함하는 파일을 출력할 수도 있다. grep 명령은 하나 이상의 파일로부터 프로그램 수정 등을 위해 변수, 또는 함수명을 찾을 때 많이 사용된다.

$ grep [옵션] [찾을 문자열 정규 표현식] [파일명]

여기서 ‘문자열’은 사용자가 찾으려는 단어 또는 구를 나타내고 ‘파일명’은 검색 대상 파일이다. ‘문자열’은 하나 또는 여러 문자를 의미한다. 단일 문자도 단어나 문장과 같이 하나의 문자열이다. 문자열에는 “빈칸”, 구두점과 보이지 않는 (제어) 문자들이 포함될 수 있다. 파일명은 지정하면 해당 파일에서만 찾지만, 파일명을 * 와 같은 메타문자를 사용하면 현재 디렉토리의 모든 파일을 대상으로 하므로 디렉토리내의 모든 파일내에서 해당 문자열을 찾게된다. ***(추가)

$grep "run[-] time" ch04

이 구문은 ch04라는 파일에서 run-time 또는 run time이 들어 있는 행을 찾을 때 사용한다. 생물 데이터를 다루다보면 특정 유전자의 이름이 들어 있는 행 등 특정 키워드를 가진 행을 찾을 때 사용하면 된다.

$ps -aux | grep python

이 구문은 현재 작업 중인 프로세스 중에서 python이 들어간 행을 찾아낸다. 복잡한 프로세스 과정 중에서 현재 실행 중인 프로세스를 조회하는 ps 명령을 파이프 | 와 함께 사용하면 특정 이름을 가진 프로세스를 찾아낼 수 있게 된다.

**

grep, egrep, fgrep의 차이를 간단히 요약하여 정리하면 다음과 같다.

명령어 설명 정규표현식
grep 다중 패턴을 검색한다. O
egrep 정규 표현식 패턴을 검색한다. O
fgrep 단순 패턴을 검색한다. X

옵션 #

**(추가)

자주 쓰는 명령어 옵션에는 -i, -c, -w를 사용한다 아래의 설명에서처럼 -i는 소문자와 대문자를 구분하지 않고 검색하는 옵션이다. 대부분의 단어에서 정확하게 매치하기 보다는 그 단어가 대소문자를 구별하지 않고 검색한다. -c 는 매치하는 행 수만을 리턴하여 갯수를 확인할 때 사용하면 유용하다. -w 는 단어 단위로 패턴을 검색하는 방법이다. 예를 들어, grep if 라고 한다면 diff, nknife 와 같이 매치하여 찾아내지만 -w 옵션을 사용한다면 (grep -w if ) 이는 매칭시키지 않는다. -l 옵션은 매치하는 내용이 있는 파일의 이름만 리턴한다. 보통은 그 내용이 같이 출력되지만 파일이 여러개 이면 사용자가 눈으로 파일 이름을 확인해야 하기 때문에 그 파일의 이름만을 가지고도 활용할 수 있다. -v옵션은 보통 상세한 설명을 나타내지만 grep 의 경우에는 매치한 내용이 없는 행만 출력한다.

$ ps -aux | grep python | grep -v grep

이 경우에는 grep 을 포함한 명령어가 자체로 출력되기 때문에 명령어 자체도 출력이 되어야 하나 찾는 명령어는 제외할 수가 있다.

**

- -c : 패턴이 일치하는 행의 수를 출력한다.
- -i : 비교시 대소문자를 구별하지 않는다.
- -v : 지정한 패턴과 일치하지 않는 행만 출력한다.
- -n : 행의 번호를 함께 출력한다.
- -l : 패턴이 포함된 파일의 이름을 출력한다.
- -w : 패턴이 전체 단어와 일치하는 행만 출력한다.

#

grep은 다른 명령어들과 함께 “필터”로 자주 사용된다. grep은 사용자가 명령의 수행결과에서 불필요한 정보를 제거할 수 있도록 한다. grep을 필터로 사용하려면, 반드시 명령의 수행 결과를 grep을 통해 파이프(|) 해야 한다.

또한 grep 탐색 패턴에 자주 사용되는 정규 표현식 방식을 아래와 같다.

**(추가)

생물학 데이터를 다루다 보면 특히 서열 데이터 fasta와 genbank같은 파일에서 서열의 갯수를 확인할 때가 있다. 이때 grep을 사용하면 대단히 유용하다. fasta파일은 크게 두 부분으로 나누어지는데 헤드와 서열부분이다. 따라서 헤드 부분의 갯수를 사용하면 된다. 헤드는

>seq_name 설명

과 같이 구성되어 있다. 따라서 ">"의 갯수를 확인하면 된다.

$ grep  ">"  seq_file

이라고 한다면 fasta 서열 파일에 들어 있는 서열의 갯수를 찾아낼수 있다. 물론 설명란에 ">"에 포함되어 있다고 하더라고 한행씩 출력하기 때문에 정확한 갯수를 찾아낼 수 있다

genbank 포맷의 경우에는 헤드, 저널, 계통, 구조, 서열로 나타나고 이것이 끝나면 "//"로 한 블럭을 끝내게 된다. 즉 서열 하나의 단위로 ACCESSION ... "//" 로 구성되어 있다. 그러므로 "//"를 사용하면 genbank안에 있는 서열의 갯수를 찾아낼 수 있다.

$ grep  "//" seq_file

각 서열의 파일이 어떤 구성(genbank, swiss-prot, fasta)로 되어 있는지는 head 명령어로 확인을 하면 된다. 전체 파일을 열어보지 않고 head -100 "seq file"과 같이 특정 부위만 확인하고 서열의 포맷을 확인한 다음 위의 명령어로 서열의 갯수를 구하면 된다.

** $ grep 'apple$' 파일명 = $는 파일의 끝을 나타냄. 파일에서 e로 끝나는 행을 찾는다.

$ grep 'app*' 파일명 
= 파일에서 app로 시작하는 모든 단어를 찾는다.

$ grep 'a.....e' 파일명 
= 파일에서 a로 시작하고 e로 끝나는 7자리 단어를 찾는다.

$ grep [a-d] 파일명 
= 파일에서 a,b,c,d로 시작하는 단어를 모두 찾는다.

$ grep [aA]pple 파일명 
= 파일에서 apple 또는 Apple로 시작하는 단어를 모두 찾는다.

$ grep 'apple' d*
= d로 시작하는 모든 파일에서 apple을 포함하는 모든 행을 찾는다.

$ grep 'apple' 파일명1 파일명2 
= 지정된 두개의 파일에서 apple을 포함하는 모든 행을 찾는다.

$ grep '^[ab]' 파일명 
= 파일에서 a나 b로 시작되는 모든 행을 찾는다.

Suggested Pages #

0.0.1_20140628_0