Rimozione del testo tra due stringhe specifiche


10

Ho un file come di seguito:

mime PI Name: ISHO SUCCESS RATE RT, Value: 95.663826
scr  PI Name: RRC Access Failures due to UU, Value: 0.13394141
prog PI Name: RRC Access Failures due to UU, Value: 0.16077702
sch PI Name: RRC Access Failures due to UU, Value: 0.11781933

Voglio rimuovere il testo PIfino a Value:. Provai

sed '/<PI>/,/<\/Value:>/d' 

Qualsiasi aiuto?

Risposte:


20

Sostituisci tutto da PIa Value:con stringa vuota:

sed 's/PI.*Value://'

10
Funzionerà se PIe si Value:verificherà su linee diverse?
Brian Fitzpatrick,

6

L'uso del dcomando in sedcancella l'intera riga. Inoltre, non sono sicuro del motivo per cui stai utilizzando <e >. Forse li stai confondendo \<e \>che grepusa per indicare i confini delle parole? In tal caso, dovresti sapere che sedutilizza \bper entrambi i tipi di limiti di parole (inizio e fine). Quindi puoi scrivere qualcosa del genere:

sed -i 's/\bPI\b.*\bValue:\b//' your_file

Per maggiore robustezza, utilizzerei perlper la quantificazione lenta di in .modo da eliminare solo il testo tra la prima occorrenza di PIe la prima occorrenza di Value:. Ovviamente tutto dipende dal tuo caso d'uso.

perl -pi -e 's{ \b PI \b .*? \b Value: \b}{}x' your_file

1

Utilizzare questo codice di seguito per rimuovere più righe tra i motivi (comprese le linee con motivi):

sed "/PI/,/Value:/d" your_file

Se vuoi modificare direttamente il tuo file:

sed -i "/PI/,/Value:/d" your_file

Nota qui la distinzione: questo elimina le righe in un intervallo, mentre la domanda richiede l'eliminazione del testo tra due stringhe.
Jeff Schaller
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.