OS

[Linux Command Line] grep

ride-dev 2024. 1. 5. 23:48

grep 명령어는 파일 내의 정보를 찾고 검색하는 데 큰 도움이 됩니다.

find나 locate 같은 명령어처럼 파일 이름만이 아닌, 내부 정보를 포함합니다.

따라서 5만 줄 이상의 매우 큰 파일에서 특정 패턴, 또는 어떤 이메일 주소와 일치하는 모든 전화번호를 찾을 수도 있습니다.

아니면 컴퓨터 전체를 검색해서, 파일에 기록된 모든 전화번호를 찾을 수도 있습니다.

이처럼 grep은 매우 유용하고 강력한 명령어입니다.

Grep

grep은 기본적으로 파일 내용을 확인합니다.

find가 파일의 이름, 경로를 확인한다면,

grep은 파일 내부를 검색하고 찾으려는 정보를 출력합니다.

grep PATTERN FILE

위 명령어를 통해 찾으려는 패턴을 FILE에서 찾을 수 있습니다.

grep은 굳이 파일이 아니어도 됩니다.

grep은 기본적으로 대소문자를 구분합니다.

-i 옵션을 통해, 대소문자 상관없이 검색할 수 있습니다.

-w 옵션은 단어 단위 검색을 할 수 있게 하며, 제공한 패턴이 정확히 일치하는 단어를 찾을 수 있습니다.

패턴이 어느 단어의 일부분인 경우를 제외하고 검색합니다.

단어는 공백, 탭 문자, EOL(개행 문자, End of Line) 등도 해당합니다.

grep의 특징은 재귀 검색이 가능하다는 것에 있습니다.

Recursive Search

grep -r "Linux"

grep에서  -r 옵션을 사용해 재귀적 검색을 할 수 있습니다.

따라서 파일 하나에 국한된 검색을 넘어, 하위 디렉토리, 또는 계층 디렉토리에 있는 모든 파일을 검색할 수 있습니다.

(find 또한 재귀적 검색을 하지만, 파일 내부까지 살펴보진 않습니다)

만약 -r 옵션을 사용할 때 디렉토리를 지정하지 않는다면,

현재 위치한 디렉토리를 기점으로 이 안에 있는 모든 파일과 디렉토리를 검사합니다.

grep -r "[ab]"

이렇게 하면 a또는 b에 대해 검색을 실시합니다.

grep 옵션

-c

-c 옵션을 사용하면 숫자가 존재하는 행의 수를 출력합니다.

grep -c "[0-9]" File

-A

-A2를 사용하면 그 행의 뒷 내용을 숫자행(2)만큼 표시하고

-B

-B3을 사용하면 그 행의 앞 내용을 숫자행(3)만큼 표시합니다.

-C

C2를 사용하면 그 행의 앞, 뒤 내용을 숫자행(2)만큼 표시합니다.

(-B2 -A2 와 동일합니다)

-n

-n옵션을 사용하면 찾고자하는 단어가 위치하는 행을 출력합니다.

-m

-m옵션을 사용하면, 출력되는 결과의 개수를 설정할 수 있습니다.

grep Regex 정규식 표현

정규 표현식은 어떤 패턴 일치 언어 또는 구문입니다.

grep에 정규 표현식을 지원하므로 여러 문자를 조합할 수 있습니다.

(전화 번호나 이메일 등의 조합)

. (마침표)

마침표는 어떤 하나의 문자를 의미합니다.

숫자 이후의 아무 문자 4개를 검색합니다.

^ (캐럿)

캐럿은 행의 시작을 의미합니다.

S로 시작하는 행을 찾습니다.

$ (달러)

달러 기호는 행 끝을 의미합니다.

.txt로 끝나는 행을 찾습니다.

[abc] (문자 집합)

[]에 넣은 문자집합을 포함한 행을 찾습니다.

1또는 2또는 3이 포함된 행을 검색합니다.

2[0-9] 를 사용하면, 20번대 숫자가 포함된 행을 찾습니다.

[^abc]

[]에 넣은 문자집합을 포함하지 않은 행을 찾습니다.

[A-Z]

범위를 지정할 수 있습니다.

[a-z]로 소문자를,

[0-5]로 숫자의 범위를 지정할 수 있습니다.

*

\

egrep grep -E

확장된 정규 표현식을 제공하는 변형 명령어입니다.

기존 grep에선 ?와 같은 특수 문자를 사용할 때 \을 앞에 붙여야 했지만,

변형 명령어에선 \를 사용하지 않아도 됩니다.

a{3}은 a를 3번 사용한 것과 같은 효과입니다.

{2,4}처럼 사용하여 범위를 지정할 수도 있습니다(2~4개).

Piping To Grep

grep은 파일이나, 디렉토리를 반복적으로 검색할 때 유용합니다.

텍스트가 많을 때에도 역시 유용합니다.

ls의 결과 또는, 화면에 있는 ps 명령어를 확인할 때에도 유용합니다.

ps

현재 프로세스들의 스냅샷을 보여줍니다.

현재 사용자와 관련되어 있는 프로세스들의 목록을 확인할 수 있습니다.

ps -aux를 실행하면, 현재 컴퓨터에서 실행되고 있는 모든 프로세스들을 보여줍니다.

그 중에 특정 행을 지정할 수 있습니다.

man 페이지에 사용할 수도 있습니다.

ls -l을 통해 권한 별 디렉토리를 확인할 수도 있습니다.

날짜나 파일 이름 기반으로 사용할 수도 있습니다.

grep을 통해 텍스트를 검색할 수 있다는 것이 중요합니다.

find로 찾아내고, grep으로 좁혀나가는 것이 일반적인 방법입니다.

 

grep은 많은 파일들 가운데 (개개별 파일을 직접 열어서 검색하는 것보다) 특정 내용을 찾는 데 효과적입니다.

728x90