patterns.txt:
"BananaOpinion"
"ExitWarning"
"SomeMessage"
"Help"
"Introduction"
"MessageToUser"
Strings.xml
<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>
Rendimiento esperado:
"ExitWarning"
"SomeMessage"
"Help"
¿Cómo imprimo los términos patterns.txtque no se encuentran en Strings.xml? Puedo imprimir los emparejados / incomparables líneas en Strings.xml, pero ¿cómo puedo imprimir los incomparables patrones ? Estoy usando ggrep (GNU grep) versión 2.21, pero estoy abierto a otras herramientas. Disculpas si este es un duplicado de otra pregunta que no pude encontrar.

Strings1.xmlyStrings2.xml), también necesitará el-hindicador en el primer grep.grepadmiten esa opción. Si tiene varios archivos de entrada, no entiendo por qué no podría simplementecateliminarlos todos y canalizar el resultadogrep.El mejor enfoque es probablemente lo que sugirió @don_crissti, así que aquí hay una variación sobre el mismo tema:
Esto es básicamente lo contrario del enfoque de @ don_crissti. Utiliza grep con Expresiones regulares compatibles con Perl (
-P) y el-ointerruptor para imprimir solo la parte correspondiente de la línea. Luego, la expresión regular lo buscaname=y lo descarta (\K), y luego busca uno o más caracteres hasta el primero"(.+?"). Esto da como resultado la lista de patrones presentes en elString.txtarchivo que luego se pasa como entrada a un grep inverso (grep -v) usando la sustitución de proceso (<(command)).fuente
Yo usaría
cut, probablemente. Es decir, si, como parece, sabe dónde esperar la cadena citada que está buscando.Si lo hago:
... después de salvar mi propia copia de su ejemplo
patterns.txtenpaty ejecutar el comando anterior, la salida es:cutimprime en stdout solo el segundo campo eliminado de"comillas-ddobles-fpara cada línea de entrada-sdelimitadora y presiona todas las demás.Lo que
cutrealmente imprimegrepes:grepbusca en su operando de archivo nombrado las líneas que-vno coinciden con las-Fcadenas ixed en su-patrón de patrón estándar-f.Si puede confiar en el segundo
"campo delimitado como el que debe coincidir, entonces definitivamente será una optimización sobre elgrep-Pmodo erl simplemente haciendo coincidir las-Fcadenas ixed y solo pequeñas porciones de ellas porquecuthace el trabajo pesado, y lo hace rápido .fuente
es fácil de entender pero tiene el tiempo de inactividad de generar múltiples procesos grep, uno para cada línea en patterns.txt.
fuente
otra forma es poner patterns.txt y Strings.xml en una lista y encontrar filas únicas
explicación:
cat patterns.txt Strings.xmlpone todo en una lista.grep -oFf patterns.txtelimina la basura en cada línea.sortAutoexplicativo. Ordenar todas las líneas.uniq -uimprime solo líneas únicas.fuente