Am un set de fișiere jurnal pe care trebuie să le revizuiesc și aș dori să caut anumite șiruri de caractere pe aceleași fișiere simultan Este posibil? În prezent folosesc

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

Cum pot folosi acest lucru și să caut șirurile de mai multe fișiere simultan? Dacă acesta este ceva care trebuie scriptat, poate cineva să ofere un script simplu pentru a face acest lucru?

Răspuns

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

Comentarii

  • Cum obțin grep pentru a omite directoare, dar totuși verific recursiv toate fisiere? grep -E 'text' **/* funcționează, dar oferă un mesaj de eroare pentru fiecare subdirector (și apoi verifică corect toate fișierele din ele)
  • @Jorn, într-adevăr ar trebui să puneți o nouă întrebare, dar folosiți find . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
  • Am primit grep: invalid max count, așa că am folosit răspunsul jherrans

Răspuns

Ați putea folosi așa ceva:

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

găsiți fiecare fișier cu .log ca extensie și aplicați comanda grep.

Comentarii

Răspuns

Dacă este este mai simplu, puteți specifica fiecare fișier unul după altul.

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

Răspuns

Dacă aveți nevoie să grep pe un set arbitrar de nume de fișiere care nu pot fi recuperate printr-o expresie regulată:

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

Care este avantajul de a lipi numele fișierelor unul după altul? Puteți compila lista de nume de fișiere într-un fișier text și apoi lipiți-o.

Răspundeți

Puteți utiliza și aparate dentare dacă fișierele sunt toate aceleași dosare.

Vedeți un exemplu

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

Dacă adăugați un s la grep, acesta suprimă erorile despre lipsă fișiere

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

Tocmai experimentam asta pentru a face comenzi care funcționează pe mai multe distribuții în care este într-un fișier față de celălalt din cauza diferențelor de sistem de operare.

Jurnalele de e-mail

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

Jurnalele de e-mail arhivate folosind 2> / dev / null pentru a suprima zgrep lipsesc avertismentele .gz

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

Referință: Există o modalitate de a face referire la mai multe fișiere dintr-un director fără a tasta din nou întreaga cale?

Răspuns

Dacă doriți să căutați recursiv și în fișiere din subdirectoare, atunci puteți utiliza comanda de mai jos

Va căuta recursiv în fișierul de subdirectoare s

egrep -r "string1|string2" pathname 

Comentarii

Răspuns

Aceasta a fost o sarcină care consuma mult timp. Și da, cu siguranță trebuia să fie scris dacă doriți să căutați mai multe șiruri în mai multe jurnale diferite în același timp. Dar recent a trebuit să fac acest lucru și a fost destul de dureros. Cu toate acestea, este gata și gata și poate fi descărcat de pe următorul link:

Descărcare script de căutare jurnal

Modul în care funcționează este destul de simplu.

Scenariul 1: Monitorizați UN șir într-un singur fișier jurnal

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

Scenariul 2: Monitorizează MULTIPLE șiruri într-un singur fișier jurnal

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

Scenariul 3: Monitorizează șiruri simple / multiple în mai multe fișiere jurnal

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

Note:

_P_ înseamnă SAU – Înlocuiește conducta „|” s ymbol pentru că este mai puțin probabil să fiți nevoit să căutați un șir care să conțină „_P_”. Dacă nu doriți să tastați „_P_”, puteți doar să înlocuiți _P_ cu „|”.

Când utilizați acest script, parametrii pe care îi veți schimba frecvent sunt:

  1. Fișierul jurnal sau directorul jurnal care trebuie monitorizat
  2. Vârsta un fișier jurnal trebuie să fie monitorizat..nu monitorizez sau descoperiți niciun fișier jurnal care are un timestamp peste 60 de minute
  3. Șirurile / șabloanele pentru care doriți să urmăriți
  4. Eticheta – acesta este al doilea până la ultimul argument pe care trebuie să îl furnizați. Înregistrează statistici despre fișierele (jurnalele) pe care le monitorizați în / var / tmp / logXray
  5. Opțiunea jurnal -indshow – Acesta este parametrul pe care doriți să îl utilizați dacă doriți să scoateți intrările din jurnalele găsite care se potrivesc cu modelul (modelele) pe care le-ați specificat.Dacă doriți doar să vedeți numărul total al fiecărui model găsit, pur și simplu înlocuiți „-ndshow” cu „-ndfoundmul”.

Când utilizați „-ndfoundmul”, veți obține o ieșire similar cu:

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

Soluție la numărul original al posterului: Căutați mai multe șiruri în mai multe fișiere jurnal

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

OS: Acest lucru a fost testat pe Ubuntu și Red Hat

Răspuns

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

Aceasta va căuta „fatal sau eroare sau critic sau eșec sau avertisment sau căutare-șir” în fișierele cu numele care începe cu „log_file?” și extensia „lo ” * în calea / cale / către / fișierul / și dați șirului de căutare o culoare aleatorie și numărul liniei de imprimare la care a fost găsit.

Comentarii

  • Sigur că acesta este un răspuns funcțional, dar utilizatorul a cerut căutarea folosind un , ați răspuns folosind un șir de căutare fix. Ne pare rău, dar adăugarea unor lucruri care nu au fost solicitate, cum ar fi numerotarea liniilor și colorarea rezultatelor, nu este probabil să facă un răspuns mai benefic. Dar vor exista și alte întrebări la care este posibil să vi se răspundă abilitățile grep, deci cel mai bun noroc din cariera dvs. de USE!
  • @zagrimsan punct luat, eu ‘ am adăugat -E ‘ fatal | eroare | critic | eșec | avertisment | ‘ param pentru asta.
  • Și hei, el a cerut mai multe fișiere, nu un model de căutare. Vă rugăm să citiți din nou întrebarea.
  • Citat din Q: ” șiruri specifice de căutare „, iar întrebarea arată modelul de căutare (care conține mai multe șiruri pentru care se potrivește) pe care îl folosește. Ai dreptate că, totuși, titlul întrebării este puțin diferit de ceea ce el întreabă cu adevărat. BTW, -E și -F nu se pot utiliza ‘ în același timp, sunt conflictual (greșeală?).

Răspuns

JigarGandhi „Răspunsul demonstrează utilizarea wildcard-ului asterisc. Există mai multe dintre ele și le puteți vedea aici sau executând man 7 glob.

Unul dintre ele care mi s-a părut util este gama potrivită cu []. Deoarece sistemul la care lucrez produce jurnale numerotate secvențial fișiere ex. product.log.1 product.log.2 ... product.log.200 , este la îndemână să grep cu o singură comandă pe 3 sau 4 fișiere secvențiale, dar nu mai mult. Deci, acest lucru

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

va fi grep pentru toate fișierele care se termină cu product.log. 5, 6 sau 7. Comodul nu este necesar să fie la sfârșit, astfel încât răspunsul flickerfly poate fi simplificat la

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

Rețineți, de asemenea, că aceste metacaractere pot fi utilizate și în alte comenzi, precum și în cp de exemplu.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *