Minulla on joukko lokitiedostoja, jotka minun on tarkistettava, ja haluaisin hakea tiettyjä merkkijonoja samoista tiedostoista kerralla. Onko tämä mahdollista? Tällä hetkellä käytän

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

Kuinka voin käyttää tätä ja etsiä useiden tiedostojen merkkijonoja kerralla? Jos tämä on jotain komentosarjaa, voiko joku antaa yksinkertaisen komentosarjan tätä varten?

Vastaa

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

Kommentit

  • Kuinka saan grep ohittaa hakemistot, mutta tarkistan silti kaikki rekursiivisesti tiedostot? grep -E 'text' **/* toimii, mutta antaa virheilmoituksen jokaiselle alihakemistolle (ja tarkistaa sitten kaikki tiedostot oikein)
  • @Jorn, sinun pitäisi todella kysyä uusi kysymys, mutta käytä find . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
  • Saan grep: invalid max count, joten käytin jherrans-vastausta

vastaus

Voit käyttää jotain tällaista:

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

Tämä etsi kaikki tiedostot, joiden laajennuksena on .log, ja käytä komentoa grep.

Kommentit

  • Miksi vaivautua xargs ja mahdollisuuteen vakavaan rikkoutumiseen tiedostonimien välissä , kun voit käyttää vain find . -name '*.log' -exec grep -E 'fatal|error|critical|failure|warning' {} +?
  • Vastaa

    Jos se on yksinkertaisempi, voit määrittää vain kukin tiedosto peräkkäin.

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

    Vastaa

    Jos tarvitset napata mielivaltaisen tiedostonimen joukkoa, jota säännöllinen lauseke ei voi noutaa:

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

    Mikä on etu tiedostojen nimien liittämiseen peräkkäin? Voit koota tiedostonimiluettelon tekstitiedostoon ja liittää sen sitten.

    Vastaa

    Voit myös käyttää kiharoita aaltosulkeita, jos tiedostot ovat kaikki sama kansio.

    Katso esimerkki

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

    Jos lisäät gr: ään s: n, tämä sulkee puuttuvien virheiden virheet tiedostot

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

    Kokeilin juuri tätä itse tekemällä komentoja, jotka toimivat useissa distroissa, joissa se on yhdessä tiedostossa ja toisessa käyttöjärjestelmän erojen vuoksi.

    Postilokit

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

    Arkistoidut postilokit käyttämällä 2> / dev / null -toimintoa zgrepin puuttuvien .gz-varoitusten tukahduttamiseksi

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

    Viite: Onko mahdollista viitata useisiin hakemiston tiedostoihin kirjoittamatta koko polkua uudelleen?

    Vastaa

    Jos haluat etsiä rekursiivisesti myös alihakemistotiedostoista, voit käyttää alla olevaa komentoa

    Se etsii rekursiivisesti alihakemistotiedostosta s

    egrep -r "string1|string2" pathname 

    kommentit

    vastaus

    Tämä oli erittäin aikaa vievä tehtävä. Ja kyllä, se oli varmasti kirjoitettava, jos aiot etsiä useita merkkijonoja useista eri lokeista samaan aikaan. Mutta minun piti tehdä tämä äskettäin ja se oli melko tuskallista. Siitä huolimatta se on valmis ja valmis ja voi ladata seuraavasta linkistä:

    Lokihakukomento Lataa

    Tämä toimii melko yksinkertaisesti.

    Skenaario 1: Seuraa YKSI merkkijono vain YKSI lokitiedostossa

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

    Skenaario 2: Tarkkaile Useita merkkijonoja vain yhdessä lokitiedostossa

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

    Skenaario 3: Seuraa yksittäisiä / useita merkkijonoja useissa lokitiedostoissa

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

    Huomautuksia:

    _P_ tarkoittaa TAI – Se korvaa putken ”|” s ymbol, koska on vähemmän todennäköistä, että joudut etsimään merkkijonoa, joka sisältää ”_P_”. Jos et halua kirjoittaa ”_P_”, voit korvata _P_ vain ”|”.

    Kun käytät tätä komentosarjaa, muutat usein seuraavia parametreja:

    1. Seurattava lokitiedosto tai lokihakemisto
    2. Ikä lokitiedoston on oltava, jotta sitä voidaan seurata .. et tarkkaile tai löydä yhtään lokitiedostoa, jonka aikaleima on yli 60 minuuttia
    3. merkkijonot / kuviot, joita haluat katsella
    4. Tunniste – tämä on toinen viimeinen argumentti, jonka sinun on annettava. Se tallentaa tilastotiedot valvotuista lokitiedostoista tiedostoissa / var / tmp / logXray
    5. Lokiasetus -ndshow – Tätä parametria haluat käyttää, jos haluat syöttää merkinnät löytyneistä lokeista vastaamaan määritettyä mallia.Jos haluat vain nähdä jokaisen löydetyn mallin kokonaismäärän, korvaa ”-ndshow” vain ”-ndfoundmul”: lla.

    Kun käytät ”-ndfoundmul” -ohjelmaa, saat tuloksen samanlainen kuin:

    [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) 

    Ratkaisu alkuperäiseen julisteeseen: Etsi useita merkkijonoja useista lokitiedostoista

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

    Käyttöjärjestelmät: Tätä testattiin Ubuntussa ja Red Hatissa

    Answer

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

    Tämä etsii ”kohtalokas tai virheellinen tai kriittinen tai epäonnistuminen tai varoitus tai hakumerkkijono” tiedostoista, joiden nimi alkaa ”lokitiedosto?” ja laajennus ”lo ” * polussa / polku / tiedostoon / tiedosto / ja anna hakumerkkijonolle satunnainen väri ja tulostusrivinumero, josta se löytyi.

    Kommentit

    • Varmasti tämä on toimiva vastaus, mutta käyttäjä pyysi etsimään , vastasit kiinteällä hakumerkkijonolla. Anteeksi, mutta sellaisten asioiden lisääminen, joita ei pyydetty, kuten rivien numerointi ja tulosten väritys, eivät todennäköisesti tee vastauksesta hyödyllisempää. Mutta tulee olemaan muita kysymyksiä, joihin todennäköisesti voidaan vastata grep -taitoihisi, niin onnea KÄYTTÖ-urallasi!
    • @zagrimsan otettu, I ’ ve lisännyt -E ’ kohtalokkaan | virheen | kriittisen | epäonnistumisen | varoituksen | ’ param.
    • Ja hei, hän pyysi nimenomaan useita tiedostoja, ei hakukuviota. Lue kysymys uudelleen.
    • Lainaus Q: ” hausta tietyistä merkkijonoista ”, ja kysymys näkyy hakumalli (joka sisältää useita vastaavia merkkijonoja), jota hän käyttää. Olet oikeassa, että kysymyksen otsikko on kuitenkin hieman poissa siitä, mitä hän todella pyytää. BTW: tä, -E ja -F ei voida käyttää ’ t samanaikaisesti, ne ovat ristiriitainen (kirjoitusvirhe?).

    Vastaa

    JigarGandhi ”Vastaus osoittaa tähtimerkin käytön. Niitä on enemmän ja näet ne täällä tai suorittamalla man 7 glob.

    Yksi niistä, jotka pidin hyödyllisinä, on alue, joka vastaa hakua []. Koska työskentelemäni järjestelmä tuottaa peräkkäin numeroidun lokin tiedostot, esim. product.log.1 product.log.2 ... product.log.200 , on kätevää napata yhdellä komennolla 3 tai 4 peräkkäiseen tiedostoon, mutta ei enempää. Joten tämä

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

    tarttuu kaikkiin tiedostoihin, jotka päättyvät product.logiin. 5, 6 tai 7. Jokerimerkin ei tarvitse olla lopussa, joten välkkyvän vastauksen vastausta voidaan yksinkertaistaa

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

    Huomaa myös, että näitä yleismerkkejä voidaan käyttää myös muissa komennoissa, kuten esimerkiksi cp.

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *