如果尚未在vim中替换,则将%替换为\%

时间:2017-05-01 07:11:01

标签: regex vim

我有一些文字有一些%和一些\%。我希望将所有%替换为\%,而不将\%转换为\\%。我试过了:

%s/\\\@!%/\\%/g

但它不起作用。

示例文本可以是:

This % and this % should be replaced but not these two: \% and \%.

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

我们可以利用?这里的贪婪

:%s/\\\?%/\\%/g
  • \\\?将匹配\零次或一次。由于?贪婪,如果存在\则会消耗
  • 因此,实际上,\%%都将替换为\%

答案 1 :(得分:2)

Vim支持负面观察,如下所示:

:s/\(\\\)\@<!%/\\%/g

这打破了:

s/      # substitute...
  \(    #   start group 1
    \\  #     a backslash
  \)    #   end group 1
  \@<!  #   group option: negative look-behind
  %     #   a "%" sign
/       # with...
  \\%   #   "\%"
/g      # globally.

您也可以:s/%/\\%/g后跟:s/\\\\%/\\%/g

答案 2 :(得分:-1)

从控制台

echo替换%和%,但不替换\%和\%。 | sed -e s /%/ \\\%/ g

给出     替换%和%但不是\%和\%。

希望这是你正在寻找的东西。如果是这样,只需使用

执行整个文件

cat FileName | sed -e s /%/ \\\%/ g