Vim搜索和替换 - 仅替换特定行上找到的字符串

3

所以我有很多这样的行 -

$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

现在的问题是,我只想删除第二个单词是“duplex-link-op”的“10mb 10ms”字符串。因此,我不能使用通用替换“10mb 10ms”为“”命令。 /- 类似的问题是,当一行中包含另一个字符串时,如何查找和替换特定字符串?我猜这与反向引用有关...但我无法在网上找到足够的教程来解决这个问题:(
3个回答

6

:g/duplex-link-op/s/10mb 10ms//g应该替换它们。

并尝试:help sub-replace-expression:help sub-replace-special,对于Vim中最接近反向引用的东西。


1

如果您不介意使用其他工具,

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

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

1

还有其他可行的方法:

:%s/\(^.*duplex-link-op.*\)\(10mb 10ms\)\(.*\)/\1***\3/g

这段代码将三个事物分组,只需将第二组替换为所需的文本即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接