Computer >> 컴퓨터 >  >> 시스템 >> Linux

리눅스에서 파일 안의 특정 단어를 찾는 방법

리눅스에서 파일 안의 특정 단어를 찾는 방법

대부분의 검색 도구는 기본적으로 파일 이름만 살펴볼 뿐, 파일 내용은 확인하지 않습니다. 하지만 가장 유명한 GNU 검색 프로그램인 grep은 적절한 옵션을 사용하면 파일 내부까지 검색할 수 있습니다. 이번 글에서는 리눅스에서 파일 안에서 특정 단어를 찾는 다양한 방법을 소개합니다.

grep으로 파일 내 특정 단어 찾기

리눅스에서 파일 안의 특정 단어를 찾는 방법

grep은 기본적으로 파일 이름뿐 아니라 파일 내용도 함께 검색합니다. 대부분의 리눅스 시스템에 기본 탑재되어 있으며, 배포판 간에도 거의 동일하게 작동합니다. 다만 사양이 낮은 리눅스 장비에서는 ack처럼 더 가벼운 명령어를 사용하는 편이 좋습니다.

파일 인코딩 방식에 따라 grep이 파일 내부를 읽지 못하는 경우도 있지만, 대부분의 텍스트 기반 형식에서는 지정한 패턴을 정상적으로 스캔할 수 있습니다.

grep -Rw '/path/to/search/' -e 'pattern'

-R 옵션은 grep을 재귀 모드로 설정해 지정된 디렉터리에 포함된 모든 하위 디렉터리까지 탐색합니다. -w 옵션은 단어 단위 전체 일치 검색을 수행합니다. 즉, 'red'는 공백 문자로 구분된 'red'와만 일치하며 'redundant'나 'tired'에는 일치하지 않습니다. -e 옵션은 검색할 패턴을 지정하며, 기본적으로 정규 표현식을 지원합니다.

grep의 속도를 높이려면 --exclude--include 옵션을 사용해 검색 범위를 특정 파일 형식으로 제한할 수 있습니다. 예를 들어 --exclude=*.csv는 .csv 확장자를 가진 파일을 검색에서 제외하고, 반대로 --include=*.txt는 .txt 확장자를 가진 파일만 검색합니다. 아래와 같이 grep 명령 바로 뒤에 옵션을 추가하면 됩니다.

grep --exclude=*.csv -Rw '/path/to/search' -e 'pattern'

특정 디렉터리를 제외하고 싶다면 아래 형식을 사용하세요.

grep --exclude-dir={dir1,dir2,*_old} -Rw '/path/to/search' -e 'pattern'

이 명령은 현재 작업 디렉터리에서 dir1, dir2 또는 *_old 패턴과 일치하는 디렉터리를 검색 대상에서 제외하고, 나머지 모든 파일에 대해 재귀적 단어 단위 검색을 실행합니다.

find로 파일 내 특정 단어 찾기

리눅스에서 파일 안의 특정 단어를 찾는 방법

find 명령어는 문법이 grep보다 다소 복잡하지만, 이를 선호하는 사용자도 많습니다.

find . -name "*.php" -exec grep "pattern" {} \;

이 명령은 find의 -exec 옵션을 활용해 찾아낸 파일을 grep에 전달하여 검색합니다. 문법을 잘 조합하면 find의 빠른 파일 시스템 검색으로 원하는 파일 형식을 먼저 걸러낸 뒤, 해당 파일들을 grep으로 넘겨 파일 내용을 검색할 수 있습니다.

단, find 자체는 파일 이름만 확인할 뿐 내용은 살펴보지 않으므로, 파일의 텍스트와 내용을 검색하려면 grep이 반드시 필요합니다. 일반적인 grep 옵션들은 -exec 옵션 안에서도 그대로 사용할 수 있습니다.

ack로 파일 내 특정 단어 찾기

ack 명령어는 아마 가장 빠른 검색 도구 중 하나지만, 앞서 소개한 도구들만큼 널리 알려져 있지는 않습니다. 아래 명령은 현재 디렉터리 내부를 검색합니다.

ack 'pattern'

특정 파일이나 디렉터리를 검색하려면 검색어 뒤에 해당 파일명 또는 전체 경로를 붙이면 됩니다.

ack 'pattern' /path/to/file.txt

마무리

대부분의 상황에서 grep은 가장 폭넓게 사용할 수 있는 최고의 검색 도구입니다. 더 빠른 검색 성능이 필요하다면 RipGrep 같은 다른 검색 도구도 함께 살펴보세요.