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

0
128
bash 프롬프트를 표시하는 Linux 노트북
Fatmawati achmad zaenuri/Shutterstock.com

1974년부터 리눅스 grep 명령은 사람들이 파일에서 문자열을 찾는 데 도움이 되었습니다. 하지만 가끔은 grep 너무 철저합니다. 다음은 여러 가지 방법으로 grep 다른 것을 무시하는 것.

grep 명령

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

의 탄생 grep 리눅스보다 앞선다. 1970년대 초 Unix에서 개발되었습니다. g/re/p 키 시퀀스에서 이름을 가져옵니다. ed 라인 편집기(추가로 “ee-dee”라고 발음함). 이것은 g현지, 답장일반 익스프레스 검색, 린트 일치 라인.

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

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

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

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

패턴 제외

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

우리는 시의 텍스트가 포함된 짧은 파일을 사용하고 있습니다. 재버워키, 루이스 캐롤. 이 두 가지 예에서 “Jabberwock” 검색어와 일치하는 행을 검색합니다.

cat jabberwocky.txt | grep "Jabberwock"
grep "Jabberwock" jabberwocky.text

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

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

우리는 그것을 달성할 수 있습니다 -v (반전 일치) 옵션. 검색어와 일치하지 않는 행이 나열됩니다.

grep -v "Jabberwock" jabberwocky.text

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

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

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

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

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

grep과 함께 여러 검색 절 사용

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

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

우리가 사용하는 경우 -E (extended regexes) 옵션을 사용하면 검색 패턴을 “|“, 이 컨텍스트에서 파이프를 나타내지 않는 것은 논리적 OR 운영자.

grep -Ev "Jabberwock|and" jabberwocky.txt

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

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

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

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

grep -Ev "^ACHT" jabberwocky.txt

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

패턴을 포함하지만 다른 패턴을 포함하지 않는 라인을 보려면 다음을 파이프할 수 있습니다. grep ~ 안으로 grep . “Jabberwock”이라는 단어가 포함된 모든 줄을 검색한 다음 또한 “살인”이라는 단어가 포함되어 있습니다.

grep "Jabberwock" jabberwocky.txt | grep -v "slain"

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

파일 제외

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

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

명명된 파일 목록 검색

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

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

grep "vorpal" *.txt

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

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

grep "sword" *.txt

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

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

가양성의 대규모 결과 집합

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

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

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

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

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

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

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

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

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

grep -R --exclude=*.{csv,md} --exclude={vol*,log*}.txt "sword" /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={backup,backup2} "vorpal" /home/dave/data

그룹화로 디렉토리 제외

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

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

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

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

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

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