Vim搜索一个模式,如果第二次重复,则删除到行尾

时间:2019-01-28 06:54:33

标签: unix vim

我正在尝试搜索一种模式,如果它第二次重复,请删除到行尾...,请帮助。 为此,我正在使用:%s/my_character.*//g,但这对于行中第一个出现的字符有效,但是我需要行中第二个出现的字符...

1 个答案:

答案 0 :(得分:1)

不确定我是否理解得很好(您应该举一个简单的例子,它总是使它更清晰)

我会这样:

:s/^\(.\{-}my_character.\{-}\)my_character.*$/\1/

这将搜索:

  1. 在my_character之前尽可能少的字符
  2. my_character
  3. 第二个my_character之前的字符尽可能少
  4. my_character
  5. 任何字符

并用上述步骤中从1到3捕获的字符替换它。


示例:

输入:

werklj z sdkl Azlksd er.

搜索并替换:

:s/^\(.\{-}z.\{-}\)z.*$/\1/

输出:

werklj z sdkl A