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