어떤 파일에서 특정 문자열이나 패턴을 찾아야 할 일이 있었나요? 그렇다면 여기에 구원의 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

먼저, 시스템에 설치된 *.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 .
를 사용했음을 유의하십시오. 이렇게 하면 터미널에서 구성 설정만 볼 수 있습니다.

3. 리눅스에서 모든 .mp3 파일 찾기
grep은 stdout에서 필터링하는 데 매우 유용할 수 있습니다. 예를 들어, 여러 가지 다른 형식으로 가득 찬 전체 음악 파일 폴더가 있다고 가정해 보겠습니다.
아티스트 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

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"

단어 전체가 아니라 패턴을 검색하지 않기 때문에 아무 것도 반환되지 않습니다.
10. Gzipped 파일에서 문자열 검색
grep의 파생물 중 몇 가지 언급할 만한 것이 있습니다. 첫 번째는 zgrep으로, zcat과 유사하게 gzipped 파일에서 사용됩니다. grep와 동일한 옵션을 사용하며 동일한 방식으로 사용됩니다:
# zgrep -i error /var/log/syslog.2.gz

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/