3 Stimmen

Vim Suchen und Ersetzen - Ersetzen einer Zeichenkette, die nur in bestimmten Zeilen gefunden wird

Ich habe also eine Reihe von Zeilen wie diese -

$ns duplex-link n1 n2 10mb 10ms DropTail
$ns duplex-link-op n1 n2 10mb 10ms queuePos 0.5
$ns duplex-link n2 n3 10mb 10ms DropTail
$ns duplex-link-op n2 n3 10mb 10ms queuePos 0.5
$ns duplex-link n3 n4 10mb 10ms DropTail
$ns duplex-link-op n3 n4 10mb 10ms queuePos 0.5

Jetzt kommt das Problem. Ich möchte die Zeichenfolge "10mb 10ms" nur dann entfernen, wenn das zweite Wort "duplex-link-op" ist. Daher kann ich nicht einfach "10mb 10ms" durch einen " " Befehl ersetzen. /- Ähnlich verhält es sich mit dem Suchen und Ersetzen einer bestimmten Zeichenfolge, die zufällig in einer Zeile mit einer anderen Zeichenfolge vorkommt. Ich vermute, dass es etwas mit Rückverweisen zu tun hat ... aber ich kann nicht genügend Anleitungen im Web finden, wie man das macht :(

6voto

racetrack Punkte 3736

:g/duplex-link-op/s/10mb 10ms//g sollte sie ersetzen.

Und versuchen :help sub-replace-expression y :help sub-replace-special für das, was den Rückverweisen in Vim am nächsten kommt.

1voto

ghostdog74 Punkte 305138

Wenn es Ihnen nichts ausmacht, andere Werkzeuge zu benutzen,

awk '$2=="duplex-link-op"{ sub("10mb 10ms","")}1' file > t && mv t file

sed -i.bak '/duplex-link-op/s/10mb 10ms//' file

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X