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

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

1974년부터 Linux 팀은 grep사람들이 파일에서 줄을 찾도록 도와왔습니다. 그러나 때로는 grep너무 조심스럽게. 다음은 grep다른 것을 무시하는 몇 가지 방법입니다.

그렙 명령

이 명령은 grep텍스트 파일에서 명령줄에 지정된 검색 패턴과 일치하는 줄을 검색합니다. 힘 grep은 정규 표현식의 사용에 있습니다. 명시적으로 정의하는 대신 찾고 있는 것을 설명할 수 있습니다.

탄생 grep은 리눅스보다 앞선다. 1970년대 초 Unix용으로 개발되었습니다. 줄 편집기 의 g/re/p 키 시퀀스에서 이름을 가져옵니다 ed(그런데 “ee-dee”로 발음됨). 이것은 일치하는 라인을 인쇄하는 글로벌 정규 검색을 의미했습니다.

grep철저하고 한결같은 사람으로 알려져 있습니다. 아마도 악명 높은 사람입니다. 때로는 시간을 낭비하고 싶지 않은 파일이나 디렉토리를 찾을 것입니다. 결과가 나무 대신 숲을 볼 수 없게 만들 수 있기 때문입니다.

물론 grep을 제어하는 ​​방법이 있습니다. 패턴, 파일 및 디렉토리를 무시하도록 지시하여 grep이 더 빠르게 검색하고 무의미한 오탐지로 넘쳐나지 않도록 할 수 있습니다.

패턴 제외

를 사용하여 검색하려면 와 grep같은 다른 프로세스에서 직접 입력 cat하거나 파일 이름을 마지막 명령줄 인수로 지정할 수 있습니다.

우리는 Lewis Carroll 의 시  Jabberwocky 의 텍스트가 포함된 짧은 파일을 사용하고 있습니다. 이 두 예에서 “jabberwock” 검색어와 일치하는 문자열을 찾고 있습니다.

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

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

-v(invert match) 옵션 으로 이것을 달성할 수 있습니다. 검색어와 일치하지 않는 문자열이 나열됩니다.

grep -v "Jabberwock"jabberwocky.text

“Jabmaglot”이 포함되지 않은 행은 터미널 창에 표시됩니다.

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

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

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

-E옵션(확장 정규식) 을 사용하면 검색 패턴을 ” |“와 결합할 수 있습니다. 이 컨텍스트에서는 채널을 나타내지 않고 논리 OR연산자입니다.

grep -Ev "Jabberwock|and"jabberwocky.txt

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

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

grep -Ev "^ACHT"jabberwocky.txt

패턴을 포함하지만 다른 패턴은 포함하지 않는 라인을 보려면 를 전달할 수 grep있습니다 grep. “jabberwock”이라는 단어가 포함된 모든 줄을 검색한 다음 “killed”라는 단어도 포함하는 모든 줄을 필터링합니다.

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

파일 제외

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 파일의 잘못된 결과 스트림으로 가려집니다.

“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-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

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다