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