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

Prototypes문자열의 접두사가 항상 .plist예제와 정확히 일치하고 플랫폼 버전의 grep이 PCRE 모드를 지원하는 경우 Perl 스타일의 부정적인 LookBehind 조회를 사용할 수 있습니다 grep -P '(?<!Prototypes)\.plist$'.

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

관련 정보