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

236
Vistas
Grep con múltiples cadenas y comodines

Estoy tratando de obtener coincidencias de un archivo de registro con varias cadenas y un comodín. Así es como se ve el registro

prueba.log

 abc|07Jan2016:sessionId=F4DF <<random log lines>> def|08Jan2016:sessionId=5415 <<random log lines>> abc|08Jan2016:sessionId=F4DF <<random log lines>> xyz|09Jan2016:sessionId=F3D2 <<random log lines>> ijk|06Jan2016:sessionId=CF38

el resultado que espero

 abc|07Jan2016:sessionId=F4DF ijk|06Jan2016:sessionId=CF38

Como puede ver, solo quiero obtener las líneas de registro que tienen ID de sesión de las líneas que tienen la cadena que coincide con 'abc' y 'ijk'

El comando grep que probé

 grep -m 1 'abc.*sessionId\|ijk.*sessionId' test.log

el resultado que estoy obteniendo

 ijk|06Jan2016:sessionId=CF38

El grep no está buscando coincidencias con la cadena 'abc', pero está buscando la coincidencia 'ijk' con el comodín '.*sessionId'. ¿Puede alguien decirme qué me estoy perdiendo aquí?

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

0

Este awk puede resolver el problema:

 awk 'BEGIN {FS="\\|"; pat["abc"]; pat["ijk"]} $1 in pat && /:sessionId=/ {print; delete pat[$1]}' file.log abc|07Jan2016:sessionId=F4DF ijk|06Jan2016:sessionId=CF38

Demostración de código

over 4 years ago · Santiago Trujillo Denunciar

0

Con sus muestras mostradas, intente seguir el código awk . Esto saldrá del programa una vez que se imprima una de las primeras ocurrencias de cada cadena, por lo que no leerá el archivo de entrada completo.

 awk -F'|' ' ($1=="abc" || $1=="xyz") && ++arr[$1]==1{ count++ print } count==2{ exit } ' Input_file

Explicación: agregando una explicación detallada para el código anterior.

 awk -F'|' ' ##Starting awk program from here and setting field separator as | here. ($1=="abc" || $1=="xyz") && ++arr[$1]==1{ ##Checking condition if 1st field is abc OR xyz AND their respective index in array arr is ONLY 1. count++ ##Increase count with 1 here. print ##Printing current line here. } count==2{ exit } ##Checking condition if count is 2 then exit from program. ' Input_file ##Mentioning Input_file name here.
over 4 years ago · Santiago Trujillo Denunciar

0

Sugerencia con grep :

 grep -E "^(abc|ijk)\|" file.log

Sugiriendo con awk :

 awk '/^(abc|ijk)\|/1' file.log
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