Text-Processing

正則表達式匹配 Vim 中的行首和行尾(引用整行)

  • May 7, 2018

對於具有以下範例的行的初始文件:

1
12
123
1234
12345

文件的期望狀態是

'1'
'12'
'123'
'1234'
'12345'

我一直在使用兩個命令來執行此操作,:%s/^/'/g並且:%s/$/'/g,我想進入一個。但是,當我嘗試

:%s/[$^]/'/g

我得到錯誤

E486: Pattern not found: [$^]

我知道括號中的前導^意味著排除,所以我認為$放在第一位意味著匹配行的開頭和結尾,這顯然不會發生。

如何在vim中匹配行的開頭和結尾?

怎麼樣:

:%s/.*/'&'/

“用單引號前後的那些字元替換零個或多個字元”。

^並且$不要將那些含義(行首或行尾)包含在[ ]用於選擇一組字元的內部。在 內部[ ],大多數正則表達式運算符都失去了意義(並且一些字元獲得了特殊含義,或者獲得了不同的含義)。前導表示該組被否定 - 匹配^這些字元之外的所有內容。因此匹配除 之外的任何字元。(並且只匹配and字元。)[]``[^$]``$``[$^]``$``^

如果要匹配行的開頭結尾,請使用/^\|$/, where |is or(需要在 Vim 的預設正則表達式模式下進行轉義)。

所以:

:%s/^\|$/'/g

Theg是必需的,因為^and$是兩個獨立的匹配項,s預設情況下只作用於一行中的第一個匹配項。

引用自:https://unix.stackexchange.com/questions/382208