Entfernen von Text zwischen zwei bestimmten Zeichenfolgen

10

Ich habe eine Datei wie folgt:

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

Ich möchte Text PIbis entfernen Value:. Ich habe es versucht

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

Irgendeine Hilfe?

Khalil Saad
quelle

Antworten:

20

Ersetzen Sie alles von PIbis Value:durch eine leere Zeichenfolge:

sed 's/PI.*Value://'
Danadam
quelle
9
Funktioniert dies, wenn PIund Value:tritt es auf verschiedenen Linien auf?
Brian Fitzpatrick
6

Mit dem dBefehl in sedwird die gesamte Zeile gelöscht. Ich bin mir auch nicht sicher, warum Sie <und verwenden >. Vielleicht verwechseln Sie sie mit \<und \>das grepbezeichnet Wortgrenzen? In diesem Fall sollten Sie wissen , dass sedAnwendungen \bfür beide Arten von Wortgrenzen (Anfang und Ende). Sie können also so etwas schreiben:

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

Für zusätzliche Robustheit würde ich perlfür die verzögerte Quantifizierung von verwenden, .so dass Sie den Text nur zwischen dem ersten Auftreten von PIund dem ersten Auftreten von löschen Value:. Natürlich hängt alles von Ihrem Anwendungsfall ab.

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

Verwenden Sie den folgenden Code, um mehrere Zeilen zwischen Mustern zu entfernen (einschließlich Zeilen mit Mustern):

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

Wenn Sie Ihre_Datei direkt ändern möchten:

sed -i "/PI/,/Value:/d" your_file
Feriman
quelle
Beachten Sie die Unterscheidung hier - dies löscht Zeilen in einem Bereich, während die Frage nach dem Löschen von Text zwischen zwei Zeichenfolgen fragt .
Jeff Schaller