如何在一行中搜索字符串,然后从那里删除到行尾

时间:2014-05-07 11:37:53

标签: linux vim vi

我有一个要求,我相信我可以在vi中做到(我确信还有很多其他解决方案),就是这样。

我有一个看起来像这样的文件

  

1234一些文字在这里的其余部分
  1235其他一些文本在这里的其余部分

我想要做的是删除文本,并将此处包含在该行的末尾,留下我的话;

  

1234一些文字
  1235其他一些文字

我已经完成了搜索和替换vi中的内容,但我不确定如何进行搜索然后运行命令。

任何帮助,一如既往地非常感谢。

感谢您的期待

4 个答案:

答案 0 :(得分:8)

怎么样:

:%s/HERE.*//

此模式将替换以HERE开头的行部分,并将其替换为空。

答案 1 :(得分:1)

d $ 的组合将从光标删除到当前行的末尾。因此,如果您使用/命令进行搜索,那么它将会......:

/HERE<enter>d$

答案 2 :(得分:0)

这也可以使用sed来完成:

sed "s/HERE.*//"

示例:

echo "this is a test HERE test" | sed "s/HERE.*//"

结果:

this is a test

答案 3 :(得分:0)

与往常一样,在vi中,有许多方法可以为这只特殊的猫提供皮肤。正如已经说过的,解决这个问题的简单方法是:

:%s/HERE.*//

然而,要回答你更普遍的问题:

  

我已经完成了搜索和替换vi中的内容,但我不确定如何进行搜索然后运行命令。

你想要:g[lobal]命令:

  

:[range]g[lobal]/{pattern}/[cmd]

        Execute the Ex command [cmd] (default ":p") on the
        lines within [range] where {pattern} matches.

对于您的确切示例,这实际上会更加冗长,但对于删除与特定模式匹配的行等任务,它会更加简洁。

e.g。如果你想删除包含HERE的所有行,你可以运行:

:g/HERE/d

Factoid:此命令表单是grep名称的来源:g/re/pglobal/{regex}/print的简写。