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
または とともに 1 つのコマンドを使用してこの操作を実行できます (または他の人がすでに示したように非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