vim之正則替換實踐

2022-04-01 20:54:59 字數 2080 閱讀 8145

場景: 有乙個html頁面的table**, 需要轉換成csv**.

html原始檔如下:

<

table

><

tr><

td>序號

td><

td>

idtd

><

td>cid

td>

tr>

<

tr>

<

td>1

td>

<

td>018011005

td>

<

td>100012

td>

tr>

<

tr>

<

td>2

td>

<

td>018011001

td>

<

td>100012

td>

tr>

<

tr>

<

td>3

td>

<

td>018011009

td>

<

td>100012

td>

tr>

<

tr>

<

td>4

td>

<

td>018011003

td>

<

td>100012

td>

tr>

<

tr>

<

td>5

td>

<

td>018011010

td>

<

td>100012

td>

tr>

<

tr>

<

td>6

td>

<

td>018011007

td>

<

td>100012

td>

tr>

<

tr>

<

td>7

td>

<

td>018011004

td>

<

td>100012

td>

tr>

<

tr>

<

td>8

td>

<

td>018011006

td>

<

td>100012

td>

tr>

table

>

正則替換步驟如下:

1. 替換table標籤:

:%s///

:%s/<\/table>//

2. 刪除只有空白的行:

:g/^\s*$/d

3. 刪除行開頭的空格:

:%s/^\s*//g

4. tr內的td資料合併到一行(替換為逗號):

:%s/<\/td>\n/,/g

5. 替換tr標籤:

:%s///g

:%s/<\/tr>//g

6. 再次刪除空行:

:g/^\s*$/d

7. 先處理表頭:

:1s/<\/td>/,/g

8. 刪除第乙個逗號前的資料:

:%s/.\,//

:%s/.*,// (錯誤的命令,會刪除第二個逗號前的內容,因為 .*是貪婪模式,會盡量多的匹配逗號)

9. 刪除行結尾的td標籤

:%s/<\/td>//g

[替換完成]

替換完後的檔案內容如下:

id,cid

018011005,100012

018011001,100012

018011009,100012

018011003,100012

018011010,100012

018011007,100012

018011004,100012

018011006,100012

vim 替換詳解

range s pattern string c,e,g,i 5 1 range指的是範圍,1,7 指從第一行至第七行,1,指從第一行至最後一行,也就是整篇文章,也可以 代表。還記得嗎?是目前編輯的文章,是前一次編輯的文章。pattern就是要被替換掉的字串,可以用 regexp 來表示。strin...

vim替換功能

range s pattern string c,e,g,i 5.1 range指的是範圍,1,7 指從第一行至第七行,1,指從第一行至最後一行,也就是整篇文章,也可以 代表。還記得嗎?是目前編輯的文章,是前一次編輯的文章。pattern就是要被替換掉的字串,可以用 regexp 來表示。strin...

VIM替換功能

1 替換 substitute range s pattern string c,e,g,i 5.1 range 指的是範圍,1,7 指從第一行至第七行,1,指從第一行至最後一行,也就是整篇文章,也可以 代表。還記得嗎?是目前編輯的文章,是前一次編輯的文章。pattern 就是要被替換掉的字串,可以...