sed '/\n/P;//!s/_\.[^ ("]*Text([^)]*)/\n&\n/;D' files... >results.txt
... probablemente funcionaría. Ejecute en sus datos de ejemplo que imprime:
_.Text("Hello World!")
_.Text("Foo")
_.ActionText("Bar")
Todo lo que hace es intentar encerrar la primera coincidencia en una línea en \n
ewlines. Si tiene éxito o no, D
elige hasta la primera línea de \n
ewline en el espacio del patrón, lo que para una línea que no coincide lo elimina por completo de la salida, pero para una coincidencia se elimina solo hasta la cabeza de su patrón y el script comienza de nuevo desde la parte superior . Si una línea \n
ew coincide con el espacio del patrón, lo que solo puede suceder si se encontró una coincidencia y luego se D
eligió, entonces sed
imprime solo hasta la primera línea \n
ew en el espacio del patrón, que se encuentra en la cola de la cadena coincidente. La s///
sustitución !
no se intenta cuando ya hay una línea \n
electrónica en el espacio del patrón, por lo queD
El comando elete borra la coincidencia ya impresa y el ciclo comienza nuevamente desde la cola de la última coincidencia.
Sin embargo, dependiendo de tu, sed
es posible que necesites usar una línea \n
electrónica literal en lugar del n
campo de sustitución del lado derecho. Pero debería poder hacer todos los argumentos del archivo a la vez, o, al menos, muchos a la vez (dependiendo de los límites de ARGMAX) . Puede simplemente bombardear esos, o tal vez hacer ...
find /path -name pattern -exec sed script_above {} + >>results.txt
... porque sed
tratará todos los archivos de entrada como una sola secuencia.
grep
apoyos-o
, ese sería el mejor candidato.