Puncte:0

Cum să combinați comanda grep și comanda sed pe același fișier text și să obțineți rezultate într-un alt fișier?

drapel mx

Am copiat următorul jurnal din grafana log explorer.

2021-06-12 21:59:41 
2021-06-12 20:59:41.118 INFO 1 --- [edElastic-14048] c.o.i.i.s.i.UserManagementServiceImpl : BUNDLE_PURCHASE_FAILED || 213550040214 | Nu s-a putut face o achiziție simplă de pachet pentru tranzacția 5001235315807102834, eroare eroare de decodare JSON: nu se poate deserializa valoarea tipului

rezultatul meu așteptat:

2021-06-12 21:59:41  213550040214 

Folosesc comanda de mai jos pentru a obține rezultatul la care mă așteptam:

grep -Eo „[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0 -9]{2}" bfailed.txt | grep -Eo „[0-9]{12}” | sed '/[a-zA-Z]/d' > b.txt

Dar această comandă nu dă nicio ieșire. Cum pot obține rezultatul așteptat?

drapel cn
Ar trebui să verificați pagina de manual grep pentru a vedea ce face `-o`.
drapel cn
Cheia pentru depanarea conductelor este să rulați prima comandă și să verificați rezultatul acesteia, apoi să adăugați următoarea comandă în conductă etc.
Puncte:2
drapel cn

Comanda ta nu dă nicio ieșire, deoarece a doua grep comanda nu se potrivește cu nimic:

grep -Eo „[0-9]{12}” 

Căutați exact 12 numere consecutive, dar nu aveți niciodată 12 numere consecutive pentru că sunteți primul grep imprimă doar data și ora, astfel încât restul liniei este deja pierdut.

Dacă introducerea dvs. este într-adevăr doar cele două linii pe care le afișați, atunci tot ce aveți nevoie este să imprimați câmpul 1, 2 și 11 pe linii care au cel puțin 11 câmpuri:

$ awk „NF>10{printează $1,$2,$11}”.
2021-06-12 20:59:41.118 213550040214

Dacă aveți mai multe rânduri și într-adevăr trebuie să se potrivească cu formatul specific de dată și oră, puteți încerca acest lucru:

$ sed -En 's/([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2 }:[0-9]{2}).*([0-9]{12}) .*/\1 \2/p' fișier 
2021-06-12 20:59:41 213550040214

The -E permite expresii regulate extinse care simplifică sintaxa aici și -n spune sed să nu imprime nimic implicit. Apoi, operatorul de substituție (e/vechi/nou/) va încerca să se potrivească cu formatele pe care le căutați și să le captureze (parantezele „captează” modele) astfel încât să putem înlocui totul cu doar cele două secțiuni potrivite (\1 \2).

Rețineți că aceasta va găsi ultimul întindere de 12 numere, așa că va eșua dacă aveți mai multe astfel de seturi. Vă putem oferi o soluție mai specifică, dar ar trebui să ne oferiți mai multe detalii despre fișierul dvs., ce este variabil și ce nu se schimbă niciodată.

Mihiran Chathuranga avatar
drapel mx
Acest lucru funcționează. De fapt, folosesc grafana log explorer. Dar nu știu cum să scriu astfel de interogări Loki complexe. De aceea copiez jurnalele în fișierul text și fac în acest fel. Ai idee despre interogările Loki.
terdon avatar
drapel cn
@MihiranChathuranga nr. Nu știu ce este Loki. Dar de aceea trebuie să dai context în întrebările tale.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.