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
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
- koskien egrep
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ä:
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:
- Seurattava lokitiedosto tai lokihakemisto
- Ikä lokitiedoston on oltava, jotta sitä voidaan seurata .. et tarkkaile tai löydä yhtään lokitiedostoa, jonka aikaleima on yli 60 minuuttia
- merkkijonot / kuviot, joita haluat katsella
- Tunniste – tämä on toinen viimeinen argumentti, jonka sinun on annettava. Se tallentaa tilastotiedot valvotuista lokitiedostoista tiedostoissa / var / tmp / logXray
- 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
.