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 風格的負向後查找,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

相關內容