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
답글 남기기