2010-10-13 11 views
2

J'ai un tas de lignes comme celui-ci -recherche et remplacer Vim - chaîne de remplacement qui se trouve sur des lignes particulières que

$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 

Maintenant est là le problème. Je veux que la chaîne "10mb 10ms" soit supprimée seulement lorsque le second mot est "duplex-link-op". Par conséquent, je ne peux pas remplacer "10mb 10ms" par une commande "". /- Sur une note similaire, comment faire une recherche et le remplacement d'une chaîne particulière qui arrive à se produire dans une ligne qui a une autre chaîne? Je suppose qu'il a quelque chose à voir avec ... mais je des backreferences suis incapable de trouver suffisamment de tutoriels sur le web sur la façon de le faire :(

Répondre

6

:g/duplex-link-op/s/10mb 10ms//g doit les remplacer.

Et essayer :help sub-replace-expression, et :help sub-replace-special pour le plus proche chose à dans vim des backreferences.

+0

C'est génial. Je ne savais pas sur la commande g du tout !! –

1

Si vous ne me dérange pas d'utiliser d'autres outils,

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

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