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

相关内容