grep은 모든 Linux 배포판에 사전 설치되어 제공되는 강력한 파일 패턴 검색 도구입니다. 어떤 이유로든 시스템이 사전 설치되어 있지 않은 경우 시스템의 패키지 관리자(Debian/Ubuntu 시스템에서는 apt-get, RHEl/CentOS/Fedora 시스템에서는 yum)를 통해 쉽게 설치할 수 있습니다.
$ sudo apt-get install grep #Debian/Ubuntu $ sudo yum install grep #RHEL/CentOS/Fedora
실제 사례를 사용하면 참여하게 됩니다. grep 명령을 사용하는 가장 쉬운 방법입니다.
1. 파일 검색 및 찾기
컴퓨터에 새로운 Ubuntu를 설치한 다음 Python을 제거할 계획이라고 가정합니다. 튜토리얼을 찾기 위해 웹을 탐색했지만 두 가지 서로 다른 버전의 Python이 사용 중이고 Ubuntu 설치 프로그램이 시스템에 어떤 버전의 Python을 설치했는지, 어떤 모듈을 설치했는지 알 수 없습니다. 이 문제를 해결하려면 다음 명령을 실행하면 됩니다.
$ sudo dpkg -l | grep -i python
출력 예
ii python2.7 2.7. 3-0ubuntu3.4 대화형 고급 객체 지향 언어(버전 2.7)
ii python2.7-minimal 2.7.3-0ubuntu3.4 Python 언어의 최소 하위 집합(버전 2.7)
ii python-openssl 0.12-1ubuntu2.1 OpenSSL 라이브러리를 둘러싼 Python 래퍼
ii python-pam 0.4.2-12.2ubuntu4 PAM 라이브러리에 대한 Python 인터페이스
먼저 dpkg -l을 실행하여 목록을 표시합니다. .deb 패키지가 시스템에 설치되었습니다. 다음으로, 파이프라인을 사용하여 출력 결과를 grep -ipython 명령으로 전송합니다. 이 단계는 결과를 grep으로 전송한 다음 Python이 포함된 모든 항목을 필터링하고 결과를 반환하는 것으로 간단히 설명할 수 있습니다. grep은 대소문자를 구분하므로 -i 옵션은 대소문자를 무시하는 데 사용됩니다. 더 자세한 검색을 수행할 계획이 아니라면 -i 옵션을 사용하는 것이 좋습니다.
2. 파일 검색 및 필터링
grep을 사용하여 하나 이상의 파일을 검색하고 필터링할 수도 있습니다. 다음과 같은 시나리오를 살펴보겠습니다.
Apache 웹 서버에 문제가 있어서 질문을 게시하려면 많은 전문 웹사이트 중 하나를 찾아야 합니다. 친절하게 답변해주신 분이 /etc/apache2/sites-available/default-ssl 파일 내용을 붙여넣어 달라고 요청하셨습니다. 모든 주석 줄을 제거할 수 있다면 당신과 당신을 돕는 사람, 그리고 파일을 읽는 다른 모든 사람들이 문제를 발견하는 것이 더 쉽지 않을까요? 물론 쉽게 할 수 있어요! 다음과 같이 하세요:
$ sudo grep -v "#" /etc/apache2/sites-available/default-ssl
-v 옵션은 grep 명령에 다음을 지시하는 것입니다. 일치하는 항목을 출력하지 않음을 의미하는 출력을 반전하고, 반대로 수행하여 일치하지 않는 모든 항목을 인쇄합니다. 이 예에서 #이 있는 줄은 주석 줄입니다(주석: 사실 이 명령은 정확하지 않으며 "#"이 포함된 줄이 모두 주석 줄은 아닙니다. 주석 줄을 정확하게 일치시키는 방법에 대해서는 다음을 참조하세요. 정규식).
3. 모든 mp3 파일 찾기
grep 명령은 표준 출력에서 결과를 필터링하는 데 매우 유용합니다. 예를 들어 다양한 형식의 음악 파일로 가득 찬 폴더가 있다고 가정해 보겠습니다. 아티스트 jayZ의 모든 mp3 형식 음악 파일을 찾아야 하며, 여기에 혼합된 오디오 트랙이 없어야 합니다. 파이프를 통해 grep과 결합된 find 명령을 사용하여 이 마법을 완료할 수 있습니다.
$ sudo find . -name ".mp3" | grep -vi "remix""
이 예에서는 find 명령을 사용하여 접미사가 .mp3인 모든 파일을 인쇄한 다음 grep -i로 파이프하여 "JayZ"라는 파일을 필터링하고 인쇄한 다음 grep으로 파이프합니다. "remix"가 포함된 항목을 필터링하는 vi
Linux에서 find 명령의 실제 사례 35개
4. 검색 문자열 앞이나 뒤에 줄 번호를 표시합니다.
나머지 두 개 옵션은 일치하는 행과 행 번호를 표시하는 데 사용되는 -A와 -B 사이를 전환하며, 각각 문자열 앞이나 뒤에 표시되는 행 수를 제어합니다. 자세한 내용은 Man 페이지에서 확인했습니다. 트릭: -A=이후, -B=이전.>
5. 일치하는 문자열 주위에 줄 번호를 인쇄합니다
grep 명령의 -C 옵션은 예제 4의 옵션과 매우 유사합니다. 일치하는 문자열 앞이나 뒤의 줄은 인쇄되지 않습니다. 대신 양방향으로 일치하는 줄을 인쇄합니다(주석: 위의 메모리 트릭과 동일: -C=center, 이를 중심으로 함): $ sudo ifconfig grep -C 2 lo
6. 일치 수 계산
이 기능은 grep의 출력을 카운터(wc 프로그램)로 파이프하는 것과 유사합니다. grep의 내장 옵션은 동일한 목적을 달성할 수 있습니다.
$ sudo ifconfig | grep -c inet6
7. 주어진 문자열에 따라 파일에서 일치하는 줄 번호를 검색합니다.
디버깅이 필요한 경우 컴파일 오류가 발생하면 grep 명령의 -n 옵션은 매우 유용한 기능입니다. 검색 중인 내용이 파일의 어느 줄인지 알려줄 수 있습니다.
$ sudo grep -n "main" setup .py
8. 모든 디렉토리에서의 재귀 검색
현재 폴더에서 문자열을 검색하고 현재 폴더에 하위 디렉터리가 많은 경우 재귀 검색을 용이하게 하기 위해 -r 옵션을 지정할 수 있습니다. $ sudo grep -r "function" *
9. 정확히 일치 검색 수행
문자열에서 정확히 일치 검색을 수행하려면 -w 옵션을 grep 명령에 전달합니다(주석: 와일드카드가 아닌 검색할 단어 포함). 예를 들어 다음과 같이 입력하면
$ sudo ifconfig | grep -w "RUNNING"
따옴표 안에 일치 항목이 포함된 줄이 인쇄됩니다. 또한 다음과 같은 방법도 시도해 볼 수 있습니다.
$ sudo ifconfig | grep -w "RUN"
이 일치 항목을 검색할 때 별도의 검색 항목이 없는 경우 즉, 아무것도 반환되지 않습니다.
10. Gzip 압축 파일에서 검색
grep의 파생 응용 프로그램에도 주목하고 싶습니다. 첫 번째는 zcat과 매우 유사하며 gzip 압축 파일에 사용할 수 있는 zgrep입니다. grep과 유사한 명령 옵션이 있으며 동일한 방식으로 사용됩니다:
$ sudo zgrep -i error /var/log/syslog.2.gz
11. file 정규식 일치
egrep은 "확장 전역 정규식"을 나타내는 또 다른 파생 애플리케이션입니다. + 및 ()와 같은 더 많은 정규식 메타 문자를 인식합니다. Egrep은 소스 코드 파일을 검색할 때 매우 유용한 도구입니다. 조각난 코드 파일에 대한 다른 검색 요구 사항도 있으므로 이러한 검색 기능이 필요합니다. grep 명령에서 -E 옵션을 사용하여 활성화할 수 있습니다.
$ sudo grep -E
12. 고정된 일치 문자열 검색
fgrep은 파일 또는 파일 목록에서 고정 스타일 문자열을 검색하는 데 사용됩니다. 기능은 grep -F와 동일합니다. fgrep의 일반적인 용도는 패턴이 포함된 파일을 전달하는 것입니다.
$ sudo fgrep -f file_full_of_patterns.txt file_to_search.txt
이것은 grep 명령의 시작일 뿐입니다. , 당신은 다양한 요구 사항을 구현하는 데 매우 유용하다는 것을 알았을 것입니다. 우리가 실행하는 한 줄 명령 외에도 grep은 cron 작업 또는 실행을 위한 자동 쉘 스크립트로 작성될 수도 있습니다. 호기심을 갖고 매뉴얼 페이지의 옵션을 실험해보고 목적에 맞는 몇 가지 grep 표현식을 작성하십시오.