Linux/UNIX에서 Grep 명령

Grep란 무엇입니까?

Grep은 “전역 정규 표현식 출력”의 약자로, 정규 표현식을 사용하여 파일 내의 텍스트 패턴을 검색하고 일치시키는 데 사용되는 명령입니다. 또한, 이 명령은 모든 리눅스 배포판에 미리 설치되어 있습니다. 이 가이드에서는 가장 일반적인 grep 명령 사용법과 인기있는 사용 사례를 살펴보겠습니다.

리눅스의 Grep 명령

Grep 명령은 텍스트 파일에서 정규 표현식이나 문자열을 찾거나 검색하는 데 사용될 수 있습니다. 이를 설명하기 위해 다음과 같이 텍스트 파일 welcome.txt을 생성하고 표시된 내용을 추가하겠습니다.

Welcome to Linux !
Linux is a free and opensource Operating system that is mostly used by
developers and in production servers for hosting crucial components such as web
and database servers. Linux has also made a name for itself in PCs.
Beginners looking to experiment with Linux can get started with friendlier linux
distributions such as Ubuntu, Mint, Fedora and Elementary OS.

좋아요! 이제 몇 가지 grep 명령을 실행하고 출력을 조작하여 원하는 결과를 얻을 준비가 되었습니다. 파일에서 문자열을 검색하려면 아래 명령을 실행하십시오. 구문

$ grep "string" file name

또는

$ filename grep "string"

예제:

$ grep "Linux" welcome.txt

출력 보시다시피 grep은 “Linux” 문자열을 검색하고 일치시키기만 하는 것이 아니라 해당 문자열이 나타나는 줄도 출력했습니다. 파일이 다른 파일 경로에 있는 경우 파일 경로를 아래와 같이 지정해야 합니다.

$ grep "string" /path/to/file

Grep 결과를 –color 옵션을 사용하여 색상화하기

검색 문자열이나 패턴이 나머지 텍스트와 다른 색상으로 표시되지 않는 시스템에서 작업하는 경우, --color를 사용하여 결과를 눈에 띄게 만드세요. 예시

$ grep --color "free and opensource" welcome.txt 

출력

모든 디렉토리에서 문자열을 재귀적으로 검색하기

현재 디렉토리와 모든 하위 디렉토리에서 문자열을 검색하고 싶다면, -r 플래그를 사용하여 검색하세요

$ grep -r "string-name" *

예를 들어

$ grep -r "linux" *

출력

대소문자 구분 무시하기

위의 예에서는, 우리의 검색 결과가 원하는 대로 나왔습니다. 이는 “Linux” 문자열이 대문자로 지정되었고 파일에도 대문자로 존재하기 때문입니다. 이제 소문자로 된 문자열을 검색해 보겠습니다.

$ grep "linux" file name

아무 출력도 없네요, 맞나요? 이는 grepping이 첫 글자가 소문자인 “linux” 문자열을 찾아 일치시키지 못했기 때문입니다. 대소문자를 구분하지 않으려면 -i 플래그를 사용하고 아래 명령을 실행하세요.

$ grep -i "linux" welcome.txt

출력 멋지죠? -i는 일반적으로 대소문자 구분 없이 문자열을 표시하는 데 사용됩니다.

-c 옵션으로 일치하는 줄 수 세기

문자열 패턴이 나타나는 총 줄 수를 세려면 아래 명령을 실행하세요

$ grep -c "Linux" welcome.txt

출력

출력 반전을 위해 Grep 사용하기

Grep 출력을 반전하려면 -v 플래그를 사용하십시오. -v 옵션은 grep에게 표현식을 포함하거나 일치하지 않는 모든 줄을 출력하도록 지시합니다. -v 옵션은 grep이 출력을 반전하도록 하여 일치하는 줄을 인쇄하는 대신 표현식과 일치하지 않는 모든 줄을 인쇄하도록 합니다. 파일로 돌아가서 우리가 보여준대로 줄 번호를 표시해 봅시다. Vim 편집기에서 ESC를 누르고, 콜론 다음에 전체 콜론을 입력한 다음

 set nu

다음, Enter를 누릅니다출력 이제, “Linux” 문자열을 포함하지 않는 줄을 표시하려면 다음을 실행하십시오

$ grep -v "Linux" welcome.txt

출력 볼 수 있듯이, grep은 검색 패턴을 포함하지 않는 줄을 표시했습니다.

검색 패턴을 포함하는 줄에 번호를 매기려면 -n 옵션을 사용하십시오

문자열 패턴이 일치하는 줄에 번호를 매기려면 다음과 같이 -n 옵션을 사용하십시오

$ grep -n "Linux" welcome.txt

출력

정확한 일치 단어를 찾으려면 -w 옵션을 사용하십시오

그럼 -w 플래그를 전달하면 표시된 정확한 일치하는 단어를 포함한 줄을 검색합니다

$ grep -w "opensource" welcome.txt

출력 그러나 만약 시도한다면

$ grep -w "open" welcome.txt

패턴이 아니라 정확한 단어를 검색하기 때문에 결과가 반환되지 않습니다!

grep과 함께 파이프 사용하기

grep 명령어는 구별된 출력을 얻기 위해 파이프와 함께 사용할 수 있습니다. 예를 들어, 우분투 시스템에서 특정 패키지가 설치되었는지 확인하려면 다음을 실행하십시오

$ dpkg -L | grep "package-name"

예를 들어, 시스템에 OpenSSH가 설치되었는지 확인하려면 dpkg -l 명령어를 grep에 파이프로 전달하십시오

$ dpkg -L | grep -i "openssh"

출력

검색 패턴 이전 또는 이후의 줄 수를 파이프로 표시

-A 또는 -B를 사용하여 검색 문자열이 나타나기 전 또는 후에 나타나는 줄 수를 표시할 수 있습니다. -A 플래그는 검색 문자열 뒤에 오는 줄을 나타내고 -B는 검색 문자열 앞에 나타나는 출력을 인쇄합니다. 예를 들어

$ ifconfig | grep -A 4 ens3

이 명령은 ifconfig 명령에서 ens 문자열 이후의 텍스트 4 줄을 포함하는 줄을 표시합니다. 출력 반대로, 아래 예에서 -B 플래그를 사용하면 ifconfig 명령에서 ether 문자열 이전의 텍스트 3 줄을 포함하는 줄을 표시합니다. 출력

$ ifconfig | grep -B 4 ether

정규 표현식과 함께 grep 사용하기

REGEX란 정규 표현식을 나타내는 약어입니다. REGEX는 패턴을 매칭하는 데 사용되는 문자 시퀀스입니다. 몇 가지 예시는 아래와 같습니다:

^      Matches characters at the beginning of a line
$      Matches characters at the end of a line
"."    Matches any character
[a-z]  Matches any characters between A and Z
[^ ..] Matches anything apart from what is contained in the brackets

예시특정 문자로 시작하는 줄을 인쇄하려면 구문은 다음과 같습니다;

grep ^character file_name

예를 들어, 우리의 welcome.txt 파일에서 문자 ‘d’로 시작하는 줄을 표시하려면 다음을 실행합니다

$ grep ^d welcome.txt 

결과 ‘x’로 끝나는 줄을 표시하려면 다음을 실행합니다

$ grep x$ welcome.txt

결과

Grep 옵션 더 많은 도움 받기

Grep 명령어 사용에 대해 더 알고 싶다면, 아래 명령어를 실행하여 명령어와 함께 사용할 수 있는 다른 플래그 또는 옵션에 대한 미리보기를 얻으십시오.

$ grep --help

샘플 출력 이 튜토리얼을 읽어 주셔서 감사합니다. 명령어를 시도해보고 어떻게 되었는지 알려주세요.

Source:
https://www.digitalocean.com/community/tutorials/grep-command-in-linux-unix