grep을 사용하여 패턴, 파일 및 디렉토리를 제외하는 방법

게시 됨: 2022-06-29
bash 프롬프트를 표시하는 Linux 노트북
Fatmawati achmad zaenuri/Shutterstock.com

1974년부터 Linux grep 명령은 사람들이 파일에서 문자열을 찾는 데 도움이 되었습니다. 그러나 때때로 grep 은 너무 철저합니다. 다음은 grep 에 다른 것을 무시하도록 지시하는 몇 가지 방법입니다.

grep 명령

grep 명령은 명령줄에 제공한 검색 패턴과 일치하는 문자열을 찾는 텍스트 파일을 검색합니다. grep 의 장점은 정규 표현식을 사용하는 데 있습니다. 이를 통해 명시적으로 정의할 필요 없이 찾고 있는 것을 설명할 수 있습니다.

grep 의 탄생은 Linux보다 먼저 등장했습니다. 1970년대 초 Unix에서 개발되었습니다. ed 라인 편집기의 g/re/p 키 시퀀스에서 이름을 가져옵니다(추가로 "ee-dee"로 발음됨). 이것은 g lobal, regular express search , print matching lines의 약자입니다.

grep 은 아마도, 악명 높게, 철저하고 한결같은 것으로 유명합니다. 때로는 시간을 낭비하지 않기를 원하는 파일이나 디렉토리를 검색할 것입니다. 결과가 나무에 대한 나무를 볼 수 없도록 할 수 있기 때문입니다.

Linux에서 grep 명령을 사용하는 방법
관련 Linux에서 grep 명령을 사용하는 방법

물론 grep을 지배하는 방법이 있습니다. grep이 검색을 더 빨리 완료하고 의미 없는 오탐지로 휩쓸리지 않도록 패턴, 파일 및 디렉토리를 무시하도록 지시할 수 있습니다.

패턴 제외

grep 으로 검색하려면 cat 과 같은 다른 프로세스에서 입력을 파이프하거나 마지막 명령줄 매개변수로 파일 이름을 제공할 수 있습니다.

우리는 Lewis Carroll의 시 Jabberwocky 의 텍스트가 포함된 짧은 파일을 사용하고 있습니다. 이 두 가지 예에서 "Jabberwock" 검색어와 일치하는 행을 검색합니다.

 고양이 jabberwocky.txt | grep "재버워크"
 grep "Jabberwock" jabberwocky.text 

grep을 사용하여 동일한 텍스트 파일을 검색하는 두 가지 방법

검색 단서와 일치하는 항목이 포함된 행이 나열되며 각 행의 일치하는 요소는 빨간색으로 강조 표시됩니다. 바로 검색입니다. 그러나 "Jabberwock"이라는 단어가 포함된 행을 제외하고 나머지를 인쇄하려면 어떻게 해야 합니까?

-v (일치 반전) 옵션을 사용하여 이를 수행할 수 있습니다. 검색어와 일치하지 않는 행이 나열됩니다.

 grep -v "Jabberwock" jabberwocky.text 

grep과 함께 -v 역 검색 옵션 사용

"Jabberwock"을 포함하지 않는 행은 터미널 창에 나열됩니다.

jabberwock이라는 단어를 포함하지 않는 모든 줄

원하는 만큼 용어를 제외할 수 있습니다. "Jabberwock"이 포함된 줄과 "and"가 포함된 줄을 필터링해 보겠습니다. 이를 달성하기 위해 -e (표현식) 옵션을 사용합니다. 우리가 사용하는 각 검색 패턴에 대해 사용해야 합니다.

 grep -v -e "Jabberwock" -e "및" jabberwocky.txt 

grep과 함께 여러 검색 절 사용

출력의 줄 수가 해당하는 감소합니다.

두 검색어와 일치하지 않는 텍스트 줄

-E (extended regexes) 옵션을 사용하면 검색 패턴을 " | ", 이 컨텍스트에서 파이프를 나타내지 않는 것은 논리적 OR 연산자입니다.

 grep -Ev "Jabberwock|및" jabberwocky.txt 

grep과 함께 논리 OR 연산자 사용

이전의 더 긴 명령으로 수행한 것과 정확히 동일한 출력을 얻습니다.

두 검색어와 일치하지 않는 텍스트 줄

명시적 검색 단서 대신 정규식 패턴을 사용하려는 경우 명령 형식은 동일합니다. 이 명령은 "ACHT" 집합에서 문자로 시작하는 모든 줄을 제외합니다.

 grep -Ev "^ACHT" jabberwocky.txt 

특정 문자로 시작하는 파일 제외

패턴을 포함하지만 다른 패턴을 포함하지 않는 행을 보려면 grepgrep 으로 파이프할 수 있습니다. "Jabberwock"이라는 단어가 포함된 모든 줄을 검색한 다음 "slain"이라는 단어 포함하는 모든 줄을 필터링합니다.

 grep "재버워크" jabberwocky.txt | grep -v "죽임" 

grep을 grep으로 파이핑하여 두 번 필터링

파일 제외

파일 모음에서 문자열이나 패턴을 찾도록 grep 에 요청할 수 있습니다. 명령줄에 각 파일을 나열할 수 있지만 접근 방식이 확장되지 않는 많은 파일이 있습니다.

 grep "vorpal" 절-1.txt 절-2.txt 절-3.txt 절-4.txt 절-5.txt 절-6.txt 

명명된 파일 목록 검색

일치하는 줄을 포함하는 파일의 이름은 출력의 각 줄 시작 부분에 표시됩니다.

타이핑을 줄이기 위해 와일드카드를 사용할 수 있습니다. 그러나 그것은 반직관적일 수 있습니다. 이것은 작동하는 것으로 보입니다.

 grep "vorpal" *.txt 

와일드카드를 사용하여 파일 모음 검색

그러나 이 디렉토리에는 시와 아무 관련이 없는 다른 TXT 파일이 있습니다. 동일한 명령 구조로 "sword"라는 단어를 검색하면 많은 오탐지가 발생합니다.

 grep "검" *.txt 

TXT 파일 모음을 통해 "검" 검색

우리가 원하는 결과는 TXT 확장자를 가진 다른 파일의 잘못된 결과로 인해 가려집니다.

가양성(false positive)의 큰 결과 집합

"vorpal"이라는 단어는 일치하지 않지만 "sword"는 "password"라는 단어에 포함되어 일부 의사 로그 파일에서 여러 번 발견되었습니다.

이러한 파일을 제외해야 합니다. 이를 위해 --exclude 옵션을 사용합니다. "vol-log-1.txt"라는 단일 파일을 제외하려면 다음 명령을 사용합니다.

 grep --exclude=vol-log-1.txt "검" *.txt

이 경우 이름이 "vol"로 시작하는 여러 로그 파일을 제외하려고 합니다. 필요한 구문은 다음과 같습니다.

 grep --exclude=vol*.txt "검" *.txt 

와일드카드가 있는 파일 제외

-R (역참조-재귀) 옵션을 사용하면 grep 이 전체 디렉토리 트리를 검색합니다. 기본적으로 해당 위치의 모든 파일을 검색합니다. 제외하려는 파일 유형이 여러 개 있을 수 있습니다.

이 테스트 시스템의 현재 디렉토리 아래에는 로그 파일, CSV 파일 및 MD 파일이 포함된 중첩된 디렉토리가 있습니다. 이것들은 우리가 제외하려는 모든 유형의 텍스트 파일입니다. 각 파일 유형에 --exclude 옵션을 사용할 수 있지만 파일 유형을 그룹화하여 원하는 것을 보다 효율적으로 달성할 수 있습니다.

이 명령은 CSV 또는 MD 확장자가 있는 모든 파일과 이름이 "vol" 또는 "log"로 시작하는 모든 TXT 파일을 제외합니다.

 grep -R --exclude=*.{csv,md} --exclude={vol*,log*}.txt "검" /home/dave/data/ 

여러 --exclude 절 및 파일 이름 그룹 사용

디렉토리 제외

무시하려는 파일이 디렉토리에 포함되어 있고 검색하려는 디렉토리에 파일이 없으면 전체 디렉토리를 제외할 수 있습니다.

개념은 --exclude-dir 옵션을 사용하고 무시할 디렉토리 이름을 지정한다는 점을 제외하면 파일 제외의 개념과 매우 유사합니다.

 grep -R --exclude-dir=backup "vorpal" /home/dave/data 

검색에서 디렉토리 제외

"backup" 디렉토리를 제외했지만 여전히 "backup2"라는 다른 디렉토리를 검색하고 있습니다.

단일 명령에서 --exclude-dir 옵션을 여러 번 사용할 수 있다는 것은 놀라운 일이 아닙니다. 제외된 디렉토리의 경로는 검색이 시작될 디렉토리를 기준으로 지정해야 합니다. 파일 시스템의 루트에서 절대 경로를 사용하지 마십시오.

 grep -R --exclude-dir=backup --exclude-dir=backup2 "vorpal" /home/dave/data 

검색에서 두 디렉토리 제외

그룹화도 사용할 수 있습니다. 다음을 사용하여 동일한 것을 더 간결하게 달성할 수 있습니다.

 grep -R --exclude-dir={백업, 백업2} "보팔" /home/dave/data 

그룹화로 디렉토리 제외

동일한 명령에서 파일 및 디렉터리 제외를 결합할 수 있습니다. 디렉토리에서 모든 파일을 제외하고 검색 되는 디렉토리에서 특정 파일 유형을 제외하려면 다음 구문을 사용하십시오.

 grep -R --exclude=*.{csv,md} --exclude-dir=backup/archive "악의적인" /home/dave/data 

동일한 명령에서 파일 유형 및 디렉토리 제외

때때로 그것은 당신이 남기는 것입니다.

때때로 grep 을 사용하면 건초 더미에서 바늘을 찾는 것처럼 느껴질 수 있습니다. 건초 더미를 제거하는 것은 큰 차이를 만듭니다.

관련: Linux에서 정규식(regexes)을 사용하는 방법