programing

grep로 한 단어를 제외하려면 어떻게 해야 하나요?

abcjava 2023. 4. 21. 20:05
반응형

grep로 한 단어를 제외하려면 어떻게 해야 하나요?

다음과 같은 것이 필요합니다.

grep ^"unwanted_word"XXXXXXXX

다음을 사용하여 할 수 있습니다.-v(용)--invert-match) 옵션은 다음과 같습니다.

grep -v "unwanted_word" file | grep XXXXXXXX

grep -v "unwanted_word" file를 가지는 회선을 필터링 합니다.unwanted_word그리고.grep XXXXXXXX패턴이 있는 행만 나열됩니다.XXXXXXXX.

편집:

당신의 코멘트를 보면, 모든 행이 리스트 되어 있는 것 같습니다.unwanted_word이 경우 필요한 것은 다음과 같습니다.

grep -v 'unwanted_word' file

이 질문에서는 "단어와 일치하지만 다른 솔루션은 제외하는 방법"으로 이해했습니다.이 질문에서는 하나의 솔루션은 2개의 GREP로 구성되어 있습니다.원하는 "word1"을 찾는 첫 번째 GREP, "word2"를 제외한 두 번째 GREP:

grep "word1" | grep -v "word2"

내 경우:grep의 "word" 옵션으로는 사용할 수 없는 "plot"과 "#plot"을 구분할 필요가 있습니다(#은 영숫자가 아닙니다).

만약 당신이grep에서 Perl 정규 표현을 지원합니다.-P할 수 있는 옵션(bash의 경우, tcsh의 경우,!):

grep -P '(?!.*unwanted_word)keyword' file

데모:

$ cat file
foo1
foo2
foo3
foo4
bar
baz

이제 모든 것을 나열해 봅시다.foo제외하고foo3

$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$ 

적절한 해결방법은grep -v "word" file, 및 그awk동등:

awk '!/word/' file

하지만, 만약 당신이 원하는 더 복잡한 상황이 생긴다면, 예를 들어,XXX나타나다YYY 그럼 나타나지 말 것awk여러 개의 파이프로 연결하는 대신 편리하다greps:

awk '/XXX/ && !/YYY/' file
#    ^^^^^    ^^^^^^
# I want it      |
#            I don't want it

더 복잡한 것도 말할 수 있어요.예를 들어 다음과 같습니다.이 행에 다음 중 하나가 포함되었으면 합니다.XXX또는YYY, 그러나 아니다.ZZZ:

awk '(/XXX/ || /YYY/) && !/ZZZ/' file

기타.

grep -v를 사용하여 일치 항목 반전:

grep -v "unwanted word" file pattern

grep 에는, 「-v」또는 「--syslog-match」옵션이 준비되어 있습니다.

예.

grep -v 'unwanted_pattern' file_name

그러면 file_name 파일에서 모든 행이 출력됩니다. file_name 파일에는 'unwanted_pattern'이 없습니다.

폴더 내의 여러 파일에서 패턴을 검색하는 경우 다음과 같이 재귀 검색 옵션을 사용할 수 있습니다.

grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'

여기서 grep은 현재 디렉토리 내의 모든 파일에 있는 'wanted_pattern'의 모든 항목을 나열하고 두 번째 grep에 전달하여 'unwanted_pattern'을 필터링합니다.'|' - 파이프는 셸에 왼쪽 프로그램의 표준 출력('p - r 'pattern' *)을 오른쪽 프로그램의 표준 입력('p - v 'pattern')에 연결하도록 지시합니다.

-v옵션에서는 패턴과 일치하지 않는 행이 모두 표시됩니다.

grep -v ^unwanted_word

를 사용하여 루트("/") 마운트 지점을 제외했습니다.grep -vw "^/".

# cat /tmp/topfsfind.txt| head -4 |awk '{print $NF}'
/
/root/.m2
/root
/var

# cat /tmp/topfsfind.txt| head -4 |awk '{print $NF}' | grep -vw "^/"
/root/.m2
/root
/var

파일이 잔뜩 들어 있는 디렉토리가 있어요"speedup" 문자열이 포함되지 않은 파일을 모두 찾아서 다음 명령을 성공적으로 사용했습니다.

grep -iL speedup *

언급URL : https://stackoverflow.com/questions/4538253/how-can-i-exclude-one-word-with-grep

반응형