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ă.