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

时间:2010-10-13 01:07:05

标签: regex vim replace

所以我有很多这样的行 -

$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”。 / - 在类似的说明中,如何搜索和替换恰好在具有另一个字符串的行中发生的特定字符串?我猜测它与反向引用有关...但我无法在网上找到足够的教程如何这样做:(

2 个答案:

答案 0 :(得分:6)

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

并尝试:help sub-replace-expression:help sub-replace-special,以便在Vim中进行反向引用。

答案 1 :(得分: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