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
과 같은 펄 스타일 부정형 뒤돌아보기를 사용할 수 있습니다..plist
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