Jeg har et sett med loggfiler som jeg trenger å gjennomgå, og jeg vil gjerne søke i bestemte strenger på de samme filene på en gang Er dette mulig? Foreløpig bruker jeg

grep -E "fatal|error|critical|failure|warning|" /path_to_file 

Hvordan bruker jeg dette og søker etter strengene til flere filer samtidig? Hvis dette er noe som må skriptes, kan noen gi et enkelt skript for å gjøre dette?

Svar

grep -E "fatal|error|critical|failure|warning|" *.log 

Kommentarer

  • Hvordan får jeg grep til å hoppe over kataloger, men likevel sjekke rekursivt alle filer? grep -E 'text' **/* fungerer, men gir en feilmelding for hver underkatalog (og sjekker deretter alle filene i dem riktig)
  • @Jorn, egentlig bør du stille et nytt spørsmål, men bruk find . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
  • Jeg får grep: invalid max count, så jeg brukte jherrans svar

Svar

Du kan bruke noe sånt:

find . -name "*.log" | xargs grep -E "fatal|error|critical|failure|warning|" 

Dette vil finn alle filer med .log som utvidelse og bruk grep kommandoen.

Kommentarer

Svar

Hvis det er enklere, kan du bare spesifisere hver fil etter hverandre.

grep -E "fatal|error|critical|failure|warning" file1.log file2.log 

Svar

Hvis du trenger det å grep på et vilkårlig sett med filnavn som ikke kan hentes med et vanlig uttrykk:

grep -E "fatal|error|critical|failure|warning|" `cat<<FIN > file1 > file2 > ... > filen > FIN` 

Hva er fordelen med å lime inn filnavnene etter hverandre? Du kan sammenstille filnavnlisten i en tekstfil og deretter lime den inn.

Svar

Du kan også bruke krøllete bukseseler hvis filene er alle den samme mappen.

Se et eksempel

grep -E "fatal|error|critical|failure|warning|" /var/log/{messages,secure,syslog,dmesg} 

Hvis du legger til et s i grep, undertrykker dette feil om manglende filer

grep -sE "fatal|error|critical|failure|warning|" /var/log/{messages,secure,syslog,dmesg} 

Jeg eksperimenterte bare med dette selv for å utføre kommandoer som fungerer på tvers av flere distros der det er i den ene filen mot den andre på grunn av OS-forskjeller.

E-postlogger

sudo grep -is [email protected] /var/log/{maillog,exim_mainlog,exim_rejectlog,mail.log,mail.err,syslog} 

Arkiverte e-postlogger ved hjelp av 2> / dev / null for å undertrykke zgrep mangler .gz-advarsler

sudo zgrep -is [email protected] /var/log/{maillog*,exim_mainlog*,exim_rejectlog*,mail.log*,mail.err*,syslog*} 2>/dev/null 

Referanse: Er det en måte å referere til flere filer i en katalog uten å skrive inn hele banen igjen?

Svar

Hvis du vil søke rekursivt i underkatalogfiler også Så kan du bruke kommandoen nedenfor

Den vil søke rekursivt i underkatalogfilen s også

egrep -r "string1|string2" pathname 

Kommentarer

Svar

Dette var en veldig tidkrevende oppgave. Og ja, det måtte absolutt skrives om du skulle søke etter flere strenger i flere forskjellige logger samtidig. Men jeg måtte nylig gjøre dette, og det var ganske smertefullt. Ikke desto mindre er det gjort og klart og kan lastes ned fra følgende lenke:

Loggsøk Skript Last ned

Slik dette fungerer er ganske enkelt.

Scenario 1: Overvåk EN streng i bare EN loggfil

./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m "can.*t.*open" "." 1 2 single_errCheck -ndshow 

Scenario 2: Overvåke FLERE strenger i bare EN loggfil

./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m "can.*t.*open_P_ntpd.*stat" "." 1 2 multi_errCheck -ndshow 

Scenario 3: Overvåke enkle / flere strenger i flere loggfiler

./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m "can.*t.*open_P_ntpd.*stat" "." 1 2 multi_err_multi_logCheck -ndshow 

Merknader:

_P_ betyr ELLER – Den erstatter røret «|» s ymbol fordi det er mindre sannsynlig at du «må søke etter en streng som inneholder» _P_ «. Hvis du ikke ønsker å skrive «_P_», kan du bare erstatte _P_ med «|».

Når du bruker dette skriptet, er parametrene du vil endre ofte:

  1. Loggfilen eller loggkatalogen som skal overvåkes
  2. Alderen en loggfil må være for at den skal overvåkes..no ikke overvåke eller oppdage noen loggfil som har en tidsstempel over 60 minutter
  3. Strengene / mønstrene du vil se etter
  4. Taggen – dette er det nest siste argumentet du må levere. Den registrerer statistikk om loggfilen (e) du overvåker under / var / tmp / logXray
  5. Loggalternativet -ndshow – Dette er parameteren du vil bruke hvis du ønsker å sende inn oppføringene fra loggene som er funnet som samsvarer med mønsteret / mønstrene du har angitt.Hvis du bare vil se det totale antallet mønstre som er funnet, er det bare å erstatte «-ndshow» med «-ndfoundmul».

Når du bruker «-ndfoundmul», vil du få en utdata lik:

[root@dgphxtest001]# ./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m "can.*t.*open_P_ntpd.*stat" "." 1 2 blahblahA -ndfoundmul OK: [/var/log/messages][1] /var/log/messages:P=(can_t_open=0 ntpd_stat=0)_F=(117s)_R=(228,228=0) 

Løsning på originalplakatens utgave: Søk etter flere strenger i flere loggfiler

./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m "fatal_P_error_P_critical_P_failure_P_warning" "." 1 2 multierr_logCheck -ndshow 

OSer: Dette ble testet på Ubuntu og Red Hat

Svar

grep -EFn "fatal|error|critical|failure|warning|search-string" /path/to/the/file/log_file?.lo* --color=auto 

Dette vil søke etter «dødelig eller feil eller kritisk eller feil eller advarsel eller søkestreng» i filene med navnet som starter med «log_fil?» og utvidelse «lo » * i banen / bane / til / filen / og gi søkestrengen en tilfeldig farge og utskriftslinjenummer den ble funnet på.

Kommentarer

  • Visst dette er et fungerende svar, men brukeren ba om å søke med en mønster, svarte du med en fast søkestreng. Beklager, men å legge til ting som ikke ble bedt om, som linjenummerering og farging av resultatene, vil sannsynligvis ikke gjøre svaret mer fordelaktig. Men det vil være andre spørsmål som sannsynligvis kan besvares grep ferdighetene dine så lykke til i din BRUK-karriere!
  • @zagrimsan poenget tatt, jeg ‘ har lagt til -E ‘ fatalt | feil | kritisk | feil | advarsel | ‘ param til det.
  • Og hei, han ba spesielt om flere filer, ikke et søkemønster. Vennligst les spørsmålet igjen.
  • Sitat fra Q: » søk etter spesifikke strenger «, og spørsmålet viser søkemønsteret (som inneholder flere strenger å matche for) han bruker. Du har rett i at tittelen på spørsmålet er litt av fra det han egentlig ber om. BTW, -E og -F kan ‘ t brukes samtidig, de er motstridende (skrivefeil?).

Svar

JigarGandhi «svar viser bruken av jokertegnet. Det er flere av dem, og du kan se dem her eller ved å kjøre man 7 glob.

En av dem som jeg syntes var nyttig er området som samsvarer med []. Siden systemet jeg jobber med produserer sekvensielt nummerert logg filer f.eks. product.log.1 product.log.2 ... product.log.200 , det er praktisk å grep med en enkelt kommando på 3 eller 4 sekvensielle filer, men ikke mer. Så dette

grep "whatever" product.log.[5-7]

vil grep for alle filer som slutter med product.log. 5, 6 eller 7. Jokertegnet er ikke nødvendig for å være på slutten, så flickerfly «svar kan forenkles til

grep -E "fatal|error|critical|failure|warning" file[1,2].log

Legg også merke til at disse jokertegnene kan brukes i andre kommandoer, som for eksempel i cp. p>

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *