12 Linux grep 명령의 실용적인 예


파일에서 특정 문자열이나 패턴을 찾는 작업에 직면했지만 어디서부터 찾아야할지 모르겠습니까? 그럼, 구출 할 grep이 있습니다!

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 설치 프로그램이 시스템에 어떤 버전을 설치했는지 또는 모듈을 설치했는지 알 수 없습니다. 다음 명령을 실행하기 만하면됩니다.

# dpkg -l | grep -i python
ii  python2.7                        2.7.3-0ubuntu3.4                    Interactive high-level object-oriented language (version 2.7)
ii  python2.7-minimal                2.7.3-0ubuntu3.4                    Minimal subset of the Python language (version 2.7)
ii  python-openssl                   0.12-1ubuntu2.1                     Python wrapper around the OpenSSL library
ii  python-pam                       0.4.2-12.2ubuntu4                   A Python interface to the PAM library

먼저 시스템에 설치된 * .deb 패키지를 나열하는 dpkg –l을 실행했습니다. 둘째, 해당 출력을 grep –i python으로 파이프했습니다. 간단히 \"grep으로 이동하여 필터링하고 'python'이 포함 된 모든 것을 반환합니다.\" -i 옵션은 grep이 대소 문자를 구분하므로 대소 문자를 무시합니다. –i 옵션을 사용하는 것은 물론 더 구체적인 검색을하려는 경우가 아니라면 시작하는 좋은 습관입니다.

2. 파일 검색 및 필터링

grep을 사용하여 개별 파일 또는 여러 파일 내에서 검색하고 필터링 할 수도 있습니다. "이 시나리오를 살펴 보겠습니다.

아파치 웹 서버에 문제가 생겼고, 인터넷에있는 많은 멋진 포럼 중 하나에 도움을 요청했습니다. 당신에게 대답하는 친절한 영혼은 당신의/etc/apache2/sites-available/default-ssl 파일의 내용을 게시 해달라고 요청했습니다. 주석이 달린 줄을 모두 제거 할 수 있다면 당신, 당신을 돕는 사람, 그리고 그것을 읽는 모든 사람들에게 더 쉬울 것 같지 않습니까? 당신은 할 수 있습니다! 다음을 실행하십시오.

# grep –v “#”  /etc/apache2/sites-available/default-ssl

–v 옵션은 grep에게 출력을 반전하도록 지시합니다. 즉, 일치하는 행을 인쇄하는 대신 반대 작업을 수행하고 표현식과 일치하지 않는 모든 행 (이 경우 # 주석 처리 된 행)을 인쇄합니다.

3. 모든 .mp3 파일 만 찾기

grep은 stdout에서 필터링하는 데 매우 유용 할 수 있습니다. 예를 들어 다양한 형식의 음악 파일로 가득 찬 전체 폴더가 있다고 가정 해 보겠습니다. 아티스트 JayZ의 모든 * .mp3 파일을 찾고 싶지만 리믹스 된 트랙은 원하지 않습니다. 몇 개의 grep 파이프와 함께 find 명령을 사용하면 트릭을 수행 할 수 있습니다.

# find . –name “*.mp3” | grep –i JayZ | grep –vi “remix”

이 예에서는 find를 사용하여 * .mp3 확장자를 가진 모든 파일을 인쇄하고, grep –i에 파이핑하여 \"JayZ\"라는 이름의 모든 파일을 필터링하고 인쇄 한 다음 필터링하는 grep –vi에 대한 또 다른 파이프를 사용합니다. 출력하고 \"remix\"문자열이있는 모든 파일 이름을 인쇄하지 않습니다.

4. 검색 문자열 앞뒤의 줄 수 표시

다른 두 가지 옵션은 –A 및 –B 스위치로, 검색 문자열 앞 또는 뒤에 오는 일치하는 행과 행 수를 표시합니다. 매뉴얼 페이지에 더 자세한 설명이 나와 있지만 –A = after 및 –B = before로 옵션을 기억하는 것이 가장 쉽습니다.

# ifconfig | grep –A 4 eth0
# ifconfig | grep  -B 2 UP

5. 경기 주변의 줄 수 인쇄

grep의 –C 옵션은 비슷하지만 문자열 앞이나 뒤에 오는 행을 인쇄하는 대신 두 방향으로 행을 인쇄합니다.

# ifconfig | grep –C 2 lo

6. 일치 수 계산

grep 문자열을 단어 수 (wc 프로그램)로 파이핑하는 것과 유사하게 grep의 내장 옵션은 다음과 같이 동일한 작업을 수행 할 수 있습니다.

# ifconfig | grep –c inet6

7. 주어진 문자열로 파일 검색

grep에 대한 –n 옵션은 컴파일 오류 중에 파일을 디버깅 할 때 매우 유용합니다. 주어진 검색 문자열의 파일에 줄 번호를 표시합니다.

# grep –n “main” setup..py

8. 모든 디렉터리에서 문자열을 재귀 적으로 검색

모든 하위 디렉토리와 함께 현재 디렉토리에서 문자열을 검색하려면 -r 옵션을 지정하여 재귀 적으로 검색 할 수 있습니다.

# grep –r “function” *

9. 전체 패턴 검색

–w 옵션을 grep에 전달하면 문자열에있는 전체 패턴을 검색합니다. 예를 들어 다음을 사용합니다.

# ifconfig | grep –w “RUNNING”

따옴표 안에 패턴이 포함 된 라인을 인쇄합니다. 반면에 다음을 시도하면 :

# ifconfig | grep –w “RUN”

패턴을 검색하지 않고 전체 단어를 검색하므로 아무것도 반환되지 않습니다.

10. Gzip 파일에서 문자열 검색

몇 가지 언급 할 가치가있는 것은 grep의 파생물입니다. 첫 번째는 zcat과 유사하게 gzip 파일에 사용하기위한 zgrep입니다. grep과 동일한 옵션을 사용하며 동일한 방식으로 사용됩니다.

# zgrep –i error /var/log/syslog.2.gz

11. 파일의 정규식 일치

egrep은 "Extended Global Regular Expression"을 나타내는 또 다른 파생어입니다. "+?와 같은 추가 표현식 메타 문자를 인식합니다. "| 및 ().

egrep은 필요에 따라 소스 파일 및 기타 코드를 검색하는 데 매우 유용합니다. –E 옵션을 지정하여 일반 grep에서 호출 할 수 있습니다.

# grep –E

12. 고정 패턴 문자열 검색

fgrep은 고정 패턴 문자열에 대한 파일 또는 파일 목록을 검색합니다. grep –F와 동일합니다. fgrep을 사용하는 일반적인 방법은 패턴 파일을 전달하는 것입니다.

# fgrep –f file_full_of_patterns.txt file_to_search.txt

이것은 grep의 시작점 일 뿐이지 만, 아마 알 수 있듯이 다양한 목적에 매우 유용합니다. 우리가 구현 한 간단한 한 줄 명령 외에도 grep을 사용하여 강력한 cron 작업과 강력한 쉘 스크립트를 작성할 수 있습니다.

창의력을 발휘하고 man 페이지의 옵션을 실험하고 자신의 목적에 맞는 grep 표현식을 생각해보십시오!