Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

305
Vistas
Cómo grep cadena de varias líneas con caracteres de nueva línea o caracteres de tabulación o espacios

Mi archivo de prueba tiene texto como:

 > cat test.txt new dummy("test1", random1).foo("bar1"); new dummy(" test2", random2); new dummy("test3", random3).foo("bar3"); new dummy = dummy( "test4", random4).foo("bar4");

Estoy tratando de hacer coincidir todas las líneas individuales que terminan con punto y coma (;) y tienen el texto "dummy(". Luego necesito extraer la cadena presente en las comillas dobles dentro de dummy. Se me ocurrió el siguiente comando, pero solo coincide la primera y tercera afirmación.

 > perl -ne 'print if /dummy/ .. /;/' test.txt | grep -oP 'dummy\((.|\n)*,' dummy("test1", dummy("test3",

Con la bandera -o, esperaba extraer una cadena entre las comillas dobles dentro del maniquí. Pero eso tampoco está funcionando. ¿Puede por favor darme una idea sobre cómo proceder?

La salida esperada es:

 test1 test2 test3 test4

Algunas de las respuestas a continuación funcionan para estructuras de archivos básicas. Si las líneas contienen más de 1 carácter de nueva línea, el código se rompe. Por ejemplo, archivos de texto de entrada con más caracteres de línea nueva:

 new dummy("test1", random1).foo("bar1"); new dummy(" test2", random2); new dummy("test3", random3).foo("bar3"); new dummy = dummy( "test4", random4).foo("bar4"); new dummy("test5", random5).foo("bar5"); new dummy("test6", random6).foo( "bar6"); new dummy("test7", random7).foo(" bar7");

Me referí a los siguientes enlaces SO:

¿Cómo dar un patrón para una nueva línea en grep?

cómo hacer grep en varias líneas hasta que ; (punto y coma)

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

@TLP estuvo bastante cerca:

 perl -0777 -nE 'say for map {s/^\s+|\s+$//gr} /\bdummy\(\s*"(.+?)"/gs' test.txt
 test1 test2

Utilizando

  • -0777 para sorber el archivo como una sola cadena
  • /\bdummy\(\s*"(.+?)"/gs encuentra todo el contenido de la cadena entre comillas después de "dummy(" (con espacios en blanco opcionales antes de la comilla de apertura)
    • la bandera s permite . para hacer coincidir las nuevas líneas.
    • cualquier cadena que contenga comillas dobles escapadas romperá esta expresión regular
  • map {s/^\s+|\s+$//gr} recorta los espacios en blanco iniciales/posteriores de cada cadena.
over 4 years ago · Santiago Trujillo Denunciar

0

Este perl debería funcionar:

 perl -0777 -pe 's/(?m)^[^(]* dummy\(\s*"\s*([^"]+).*/$1/g' file test1 test2 test3 test4

Seguir gnu-grep + tr también debería funcionar:

 grep -zoP '[^(]* dummy\(\s*"\s*\K[^"]+"' file | tr '"' '\n' test1 test2 test3 test4
over 4 years ago · Santiago Trujillo Denunciar

0

Con las muestras mostradas, intente seguir el código awk , escrito y probado en GNU awk .

 awk -v RS='(^|\n)new[^;]*;' ' RT{ rt=RT gsub(/\n+|[[:space:]]+/,"",rt) match(rt,/"[^"]*"/) print substr(rt,RSTART+1,RLENGTH-2) } ' Input_file
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda