특정 단어가 없는 모든 줄을 grep합니다.

특정 단어가 없는 모든 줄을 grep합니다.

fileA.txt 파일이 있습니다.

Batman.plist
Green Arrow.plist
Hawkgirl.plist
EOPrototypes.plist
Person.plist
EOPrototypes.plist
EOJavellinPrototypes.plist
Sinestro
Slomon Grundy.plist
Batman Beyond.plist
EORedRobin
EORavenPrototypes.plist

plist이제 로 끝나고 단어를 포함하지 않는 모든 줄을 얻으려면 Prototype. 지금까지 나는

grep -v "Prototype" fileA.txt | grep -E "*plist$"

그리고 출력은

Batman.plist
Green Arrow.plist
Hawkgirl.plist
Person.plist
Slomon Grundy.plist
Batman Beyond.plist

내가 원하는 것이 바로 그것이다.

하지만 이를 수행하는 더 좋은 방법이 있습니까?

답변1

grep -v Prototype | grep 'plist$'

아마도 그만큼 좋을 것입니다. sed또는 (또는 다른 사람들이 이미 보여준 것처럼 awk비표준 확장을 사용하여 ) 하나의 명령으로 수행할 수 있습니다 .grep

sed '/Prototype/d;/plist$/!d'

또는

awk '/plist$/ && ! /Prototype/'

그러나 이것이 반드시 더 효율적이지는 않습니다.

답변2

이 시도

grep -P '^(?!.*Prototype).*plist$' fileA.txt

답변3

예에 표시된 것처럼 문자열이 항상 문자열 앞에 정확하게 붙고 플랫폼의 grep 버전이 PCRE 모드를 지원하는 경우 다음 Prototypes과 같은 펄 스타일 부정형 뒤돌아보기를 사용할 수 있습니다..plistgrep -P '(?<!Prototypes)\.plist$'

$ grep -P '(?<!Prototypes)\.plist$' fileA.txt
Batman.plist
Green Arrow.plist
Hawkgirl.plist
Person.plist
Slomon Grundy.plist
Batman Beyond.plist

관련 정보