Eu usaria cut
, provavelmente. Ou seja, se, ao que parece, você souber onde esperar a string citada que está procurando.
Se eu fizer:
{ cut -sd\" -f2 |
grep -vFf- pat
} <<\IN
# <string name="Introduction">One day there was an apple that went to the market.</string>
# <string name="BananaOpinion">Bananas are great!</string>
# <string name="MessageToUser">We would like to give you apples, bananas and tomatoes.</string>
IN
... depois de salvar minha própria cópia do seu exemplo patterns.txt
in pat
e executar o comando acima, a saída é:
"ExitWarning"
"SomeMessage"
"Help"
cut
imprime para stdout apenas o segundo "
double-quote -d
elimited -f
ield para cada linha de entrada combinada pelo delimitador e -s
pressiona todos os outros.
O que cut
realmente imprime em grep
é:
Introduction
BananaOpinion
MessageToUser
grep
pesquisa seu operando de arquivo nomeado para as linhas que -v
não correspondem às sequências -F
ixed em seu -
padrão stdin -f
ile.
Se você puder confiar no segundo campo "
-delimited como o que deve corresponder, então definitivamente haverá uma otimização sobre o modo grep
-P
erl combinando apenas sequências -F
ixed e apenas pequenas porções deles porque cut
faz o trabalho pesado - e faz isso rápido .