Linux Grep 명령어의 실제 예제 12가지

어떤 파일에서 특정 문자열이나 패턴을 찾아야 할 일이 있었나요? 그렇다면 여기에 구원의 grep 명령어가 있습니다!

grep은 모든 Linux 배포본에 기본으로 탑재된 강력한 파일 패턴 검색 도구입니다. 시스템에 설치되어 있지 않은 경우, 다음과 같이 패키지 관리자를 통해 쉽게 설치할 수 있습니다.

$ 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]    

I have found that the easiest way to get your feet wet with the grep command is to just dive right in and use some real-world examples.

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

새로운 Ubuntu를 머신에 최근 설치했다고 가정해 봅시다. 이제 Python 스크립트를 시도할 것입니다.

튜토리얼을 찾아보고 있지만, 사용 중인 두 가지 다른 버전의 Python이 있음을 알게 되었으며, Ubuntu에 설치된 Python 버전이나 모듈이 설치되었는지 알 수 없습니다.

다음과 같이 grep을 사용하여 다음 dpkg 명령어를 실행하면 됩니다:

dpkg -l | grep -i python
Finding Files with Grep Command

먼저, 시스템에 설치된 *.deb 패키지를 나열하는 dpkg –l을 실행했습니다. 둘째, 해당 출력물을 grep -i python에 파이핑했는데, 이는 간단히 “‘python’이 포함된 모든 것을 grep에서 필터링하여 반환하라”는 것을 의미합니다.

-i 옵션은 대소문자를 무시하도록 설정되어 있으며, grep는 대소문자를 구분하기 때문에 사용됩니다. -i 옵션을 사용하는 것은 더 구체적인 검색을 하려는 경우를 제외하고는 좋은 습관입니다.

2. 리눅스에서 파일 검색 및 필터링

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

당신은 Apache 웹 서버에 문제가 있고, 인터넷의 많은 멋진 포럼 중 하나에 도움을 요청하기 위해 연락했습니다.

당신에게 답변해준 친절한 분이 당신에게 /etc/apache2/apache2.conf 파일의 내용을 게시하라고 요청했습니다. 주석 처리된 모든 줄을 제거할 수 있다면, 당신, 도와주는 사람, 그리고 모두에게 더 쉬울텐데요. 이렇게 실행하면 됩니다:

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

-v 옵션은 grep에 출력을 반전시키도록 지시합니다. 즉, 일치하는 줄을 출력하는 대신, 이 경우에는 # 주석 처리된 줄을 제외한 모든 줄을 출력합니다.

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

Print Uncommented Lines in Linux

3. 리눅스에서 모든 .mp3 파일 찾기

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

아티스트 JayZ*.mp3 파일을 모두 찾고 싶지만 리믹스된 트랙은 원하지 않는다고 가정해 보겠습니다. 몇 가지 find 명령어grep 파이프를 사용하면 문제가 해결됩니다:

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

이 예에서는 find를 사용하여 확장자가 *.mp3인 모든 파일을 인쇄하고, “JayZ”라는 이름을 가진 모든 파일을 필터링하고 인쇄하기 위해 grep –i로 파이프를 연결하고, 다른 파이프로 문자열(대소문자 구분 없음) “remix”를 가진 모든 파일 이름을 필터링하고 인쇄하지 않도록 grep –vi를 사용합니다.

[ Linux Find 명령어의 실용적인 예제 35가지 보기 ]

4. 검색 문자열 이전이나 이후의 줄 수 표시

또 다른 두 가지 옵션은 일치하는 줄과 검색 문자열 이전이나 이후에 나오는 줄 수를 표시하는 -A-B 스위치입니다.

-A = 이후, 그리고 -B = 이전:

ifconfig | grep -A 4 inet
ifconfig | grep -B 2 UP
Print Number of Lines Before and After String

5. 일치하는 줄 주변의 줄 수를 출력합니다

-C 옵션은 grep의 옵션과 유사하지만, 문자열 앞이나 뒤에 오는 줄을 인쇄하는 대신에 양방향으로 줄을 인쇄합니다:

# 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에서 지정된 문자열로 파일을 검색합니다

–n 옵션은 grep에서 파일을 디버깅할 때 매우 유용합니다. 주어진 검색 문자열의 파일 내 라인 번호를 표시합니다:

# grep -n "main" setup.py

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

현재 디렉토리 및 모든 하위 디렉토리에서 문자열을 검색하려는 경우, 재귀적으로 검색하려면 –r 옵션을 지정할 수 있습니다:

# grep -r “function” *

9. 전체 패턴을 검색합니다

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

# ifconfig | grep -w "RUNNING"

따옴표에 포함된 패턴을 포함하는 줄이 출력됩니다. 반면에 다음을 시도하면:

# ifconfig | grep -w "RUN"
Find Entire Pattern

단어 전체가 아니라 패턴을 검색하지 않기 때문에 아무 것도 반환되지 않습니다.

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

grep의 파생물 중 몇 가지 언급할 만한 것이 있습니다. 첫 번째는 zgrep으로, zcat과 유사하게 gzipped 파일에서 사용됩니다. grep와 동일한 옵션을 사용하며 동일한 방식으로 사용됩니다:

# zgrep -i error /var/log/syslog.2.gz
Search String in Gzipped Files

11. 파일에서 정규 표현식 일치

egrep 명령어은 “확장된 글로벌 정규 표현식”을 나타내는 또 다른 파생물입니다. 이는 at + ? |()와 같은 추가적인 표현 메타 문자를 인식합니다.

egrep 명령어은 소스 파일 및 다른 코드 조각을 검색하는 데 매우 유용합니다. 필요한 경우 정규 grep에서 -E 옵션을 지정하여 호출할 수 있습니다.

grep -E

12. 고정된 패턴 문자열 검색

fgrep 명령어는 파일이나 파일 목록에서 고정된 패턴 문자열을 검색합니다. 이는 grep -F와 동일합니다. fgrep을 사용하는 일반적인 방법은 패턴 파일을 전달하는 것입니다:

fgrep –f file_full_of_patterns.txt file_to_search.txt

이것은 grep으로 시작하는 지점에 불과하지만 아마도 여러분은 그것이 다양한 목적에 있어서 무궁무진한 가치가 있다는 것을 알 수 있을 것입니다. 우리가 구현한 간단한 한 줄 명령어들을 제외하고도, grep은 강력한 cron 작업 및 견고한 쉘 스크립트를 작성하는 데 사용될 수 있습니다.

창의적이 되어 보세요, man 페이지의 옵션들을 실험해보고, 여러분의 목적에 부합하는 grep 표현식을 만들어 보세요!

Source:
https://www.tecmint.com/12-practical-examples-of-linux-grep-command/