Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

232
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda