我有一個檔案 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