웹사이트 검색

Linux에서 Grep 명령을 사용하는 방법 [12가지 유용한 예]


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

grepLinux의 모든 배포판에 탑재되어 제공되는 강력한 파일 패턴 검색기입니다. 어떤 이유로든 시스템에 설치되어 있지 않은 경우 표시된 대로 패키지 관리자를 통해 쉽게 설치할 수 있습니다.

sudo apt install grep         [On Debian, Ubuntu and Mint]
sudo yum install grep         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
sudo emerge -a sys-apps/grep  [On Gentoo Linux]
sudo apk add grep             [On Alpine Linux]
sudo pacman -S grep           [On Arch Linux]
sudo zypper install grep      [On OpenSUSE]    

grep 명령을 사용하는 가장 쉬운 방법은 직접 들어가서 실제 사례를 사용하는 것임을 알게 되었습니다.

1. Linux에서 파일 검색 및 찾기

방금 컴퓨터에 새 Ubuntu의 새 복사본을 설치했고 Python 스크립팅을 시도한다고 가정해 보겠습니다.

튜토리얼을 찾기 위해 웹을 샅샅이 뒤졌지만 두 가지 다른 버전의 Python이 사용 중이고 설치 프로그램이 Ubuntu에 어떤 버전의 Python을 설치했는지 알 수 없습니다. 모듈을 설치한 경우.

표시된 대로 grep을 사용하여 다음 dpkg 명령을 실행하기만 하면 됩니다.

dpkg -l | grep -i python

먼저 시스템에 설치된 *.deb 패키지 목록을 보여주는 dpkg –l을 실행했습니다. 둘째, 해당 출력을 grep -i python으로 파이프했습니다. 이 명령은 간단히 "grep으로 이동하여 필터링하고 'python'이 포함된 모든 항목을 반환합니다."라고 말합니다. ”

grep은 대소문자를 구분하므로 -i 옵션은 대소문자를 무시하기 위해 존재합니다. -i 옵션을 사용하는 것은 물론 더 구체적인 검색을 시도하는 경우를 제외하고는 시작하는 좋은 습관입니다.

2. Linux에서 파일 검색 및 필터링

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

귀하는 Apache 웹 서버에 문제가 있어 인터넷상의 여러 멋진 포럼 중 하나에 연락하여 도움을 요청했습니다.

귀하에게 답장을 보내주신 친절한 분이 /etc/apache2/apache2.conf 파일의 내용을 게시해 달라고 요청하셨습니다. 주석이 달린 줄을 모두 제거할 수 있다면 당신과 당신을 돕는 사람, 그리고 그것을 읽고 있는 모든 사람에게 더 쉽지 않을까요? 글쎄요! 이것을 실행하세요:

grep -v ^\# /etc/apache2/apache2.conf | grep .

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

모든 빈 줄의 출력을 숨기기 위해 마지막에 grep .도 사용했습니다. 이렇게 하면 터미널의 구성 설정만 볼 수 있습니다.

3. Linux에서 모든 .mp3 파일 찾기

grepstdout에서 필터링하는 데 매우 유용할 수 있습니다. 예를 들어, 다양한 형식의 음악 파일로 가득 찬 폴더 전체가 있다고 가정해 보겠습니다.

아티스트 JayZ의 모든 *.mp3 파일을 찾고 싶지만 리믹스 트랙은 원하지 않습니다. 두 개의 grep 파이프와 함께 find 명령을 사용하면 문제가 해결됩니다.

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

이 예에서는 find를 사용하여 확장자가 *.mp3인 모든 파일을 인쇄하고 이를 grep –i로 파이핑하여 필터링합니다. 이름이 "JayZ "인 모든 파일을 출력하고 인쇄한 다음 grep –vi에 대한 또 다른 파이프를 사용하여 문자열이 포함된 모든 파일 이름을 필터링하고 인쇄하지 않습니다(어떤 경우에도). “리믹스”.

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

또 다른 옵션으로는 -A-B 스위치가 있는데, 이 스위치는 일치하는 줄과 검색 문자열 앞이나 뒤에 오는 줄 수를 표시합니다.

매뉴얼 페이지에 더 자세한 설명이 나와 있지만 옵션을 -A=after-B=<로 기억하는 것이 가장 쉽습니다. 강한>이전:

ifconfig | grep -A 4 inet
ifconfig | grep -B 2 UP

5. 일치하는 줄 수를 인쇄합니다.

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

ifconfig | grep -C 2 lo

 TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 15314  bytes 1593769 (1.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0

6. 일치하는 횟수 계산

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

ifconfig | grep -c inet6

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

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

grep -n "main" setup.py

8. 모든 디렉토리에서 반복적으로 문자열 검색

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

grep -r “function” *

9. 전체 패턴 검색

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

ifconfig | grep -w "RUNNING"

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

ifconfig | grep -w "RUN"

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

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

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

zgrep -i error /var/log/syslog.2.gz

11. 파일에서 정규식 일치

egrep 명령은 "확장 전역 정규 표현식"을 나타내는 또 다른 파생 명령입니다. at + ?와 같은 추가 표현식 메타 문자를 인식합니다. |().

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 표현식을 생각해 보세요!