Come inserire una linea dopo un motivo particolare?


1

Sto cercando di inserire uno schema denominato "nessun commento" dopo la riga "3 3 1 maggio 7 05:31:11 2019" nel seguente file di esempio

INV_YTEC_TR ::
3 3 1 maggio 7 05:31:11 2019
CA AOI1 0 0 -1 -3176120 1602000 12
A 0.4

Ho provato a seguire il codice sed ma non ha aiutato.

sed -i 's / \ (^ \ d + \ s + \ d + \ s + \ d + \ s + [A-Za-z] + \ s + \ d + \ s + \ d +: \ d +: \ d + \ s + \ d +. * $ \) / \ 1 \ nno commenti / ig 'tmp.txt 

Qualcuno potrebbe aiutarmi con il giusto comando sed?

Saluti, Shikha

Risposte:


1

GNU sednon conosce la \dscorciatoia, è possibile utilizzare l'uno [0-9]o l'altro [:digit:], e è necessario abilitare la sintassi di espressione regolare estesa (ERE) con l' -ropzione per +essere riconosciuto come metacarattere:

sed -ir 's/^[0-9]+\s+[0-9]+\s+[0-9]+\s+[A-Za-z]+\s+[0-9]+\s+[0-9]+:[0-9]+:[0-9]+\s+[0-9]+.*/&\nno comments/' tmp.txt

&a destra viene sostituito con l'intera corrispondenza, quindi non è necessario creare un gruppo. $alla fine non è necessario se la tua espressione termina con .*. Il gflag lobally fa sedsostituire tutte le partite della linea, non è necessario quando abbini già l'intera linea. La iflage rende il regex insensibile al maiuscolo / minuscolo, ma l'hai già fatto usando [A-Za-z]e non [a-z]o [A-Z], quindi puoi ometterlo anche tu.

I gruppi non sono solo un modo per ritagliare parti della partita per usarla nella sostituzione, ma servono anche come modo per combinare sequenze. Nel tuo caso sono utili per unire ad es

[0-9]+\s+[0-9]+\s+[0-9]+\s+

per

([0-9]+\s+){3}

che accorcia la tua regex:

sed -ir 's/^([0-9]+\s+){3}[A-Za-z]+\s+[0-9]+\s+([0-9]+:){2}[0-9]+\s+[0-9]+.*/&\nno comments/' tmp.txt

Esempio di esecuzione

$ <s sed -r 's/^([0-9]+\s+){3}[A-Za-z]+\s+[0-9]+\s+([0-9]+:){2}[0-9]+\s+[0-9]+.*/&\nno comments/'
INV_YTEC_TR::
3 3 1 May  7 05:31:11 2019
no comments
CA AOI1 0 0 -1 -3176120 1602000 12
A 0.4

Ulteriori letture

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.