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

i86rm4rw  于 2023-11-19  发布在  其他
关注(0)|答案(3)|浏览(198)

所以我有一堆这样的线-

$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

字符串
现在问题来了。我希望“10 mb 10 ms”字符串只在第二个单词恰好是“class-link-op”的地方被删除。因此,我不能用““命令来执行一般的替换“10 mb 10 ms”。/-类似地,如果一个特定的字符串恰好出现在一行中,而另一个字符串又出现在另一行中,我该如何进行搜索和替换?我猜这与反向引用有关......但我无法在网上找到足够的教程来说明如何做到这一点:(

jvlzgdj9

jvlzgdj91#

:g/duplex-link-op/s/10mb 10ms//g应该替换它们。
在Vim中尝试:help sub-replace-expression:help sub-replace-special,以获得最接近反向引用的东西。

s1ag04yj

s1ag04yj2#

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

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

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

字符串

zwghvu4y

zwghvu4y3#

也适用于:

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

字符串
这段代码将三个东西分组,只需要将第二个分组替换为所需的文本。

相关问题