use*_*828 5 vim text-processing regular-expression
对于具有像此示例这样的行的初始文件:
1
12
123
1234
12345
Run Code Online (Sandbox Code Playgroud)
文件的期望状态是
'1'
'12'
'123'
'1234'
'12345'
Run Code Online (Sandbox Code Playgroud)
我已经有两个命令这样做,:%s/^/'/g而且:%s/$/'/g,我想进入一个。但是,当我尝试
:%s/[$^]/'/g
Run Code Online (Sandbox Code Playgroud)
我收到错误
E486: Pattern not found: [$^]
Run Code Online (Sandbox Code Playgroud)
我知道^括号中的领先意味着排除,所以我认为$首先意味着匹配行的开头和结尾,这显然不会发生。
如何在vim中匹配行的开头和结尾?
^并且$不要将这些含义(行的开头或结尾)保留在 内[ ],它用于选择一组字符。在 内部[ ],大多数正则表达式运算符失去了它们的含义(并且某些字符获得了特殊含义,或者获得了不同的含义)。前导^意味着[]该组被否定 - 匹配除这些字符之外的所有字符。因此[^$]可以匹配除 之外的任何字符$。(并且[$^]仅匹配$和^字符。)
如果你想匹配行的开头或结尾,请使用/^\|$/, where |is or(需要在 Vim 的默认正则表达式模式下转义)。
所以:
:%s/^\|$/'/g
Run Code Online (Sandbox Code Playgroud)
之所以g需要 ,是因为^和$是两个独立的匹配项,并且s默认情况下仅作用于一行中的第一个匹配项。
| 归档时间: |
|
| 查看次数: |
11838 次 |
| 最近记录: |