2009年4月1日星期三

vim中的查找替换一例

vim中的查找与替换一例

拿到一个单词表,想要将之导入到supermemo 2006中去。然而与supermemo 2006中的Q&A txt 格式不一样,所以需要处理一下。用程序当然就用python了,不过想试试vim是否能够搞定。

单词表格式如下:
…………
9.slip v. 滑动,滑落;忽略

10.slide v.
滑动,滑落 n. 滑动;滑面;幻灯片

11.bacteria n.
细菌

12.breed n.
种,品种 v. 繁殖,产仔

13.budget n.
预算 v. 编预算,作安排

14.candidate n.
候选人

15.campus n.
校园

16.liberal a.
慷慨的;丰富的;自由的

17.transform v.
转变,变革;变换

…………


supermemo中的Q&A txt格式如下:
…………
Q: slip
A
: v. 滑动,滑落;忽略

Q
: slide
A
: v. 滑动,滑落 n. 滑动;滑面;幻灯片
…………

1:先将单词复制到vim保存到一个文件
2:首先将单词与中文解释分成二行,第二行需要以A: 开始
命令模式下输入:%s/\(\l\) \(ad\|vt\|vi\|a\|n\|v\)\./\1\rA: \2\./g后得到如下
9.slip
A: v. 滑动,滑落;忽略
10.slide
A: v. 滑动,滑落 n. 滑动;滑面;幻灯片

3:将以数字开始的行,替换为以Q: 开始的行,并在前添加一空白行
命令模式下输入:%s/\d\+\./\rQ: /g后得到

Q: slip
A: v. 滑动,滑落;忽略

Q: slide
A: v. 滑动,滑落 n. 滑动;滑面;幻灯片

4:保存,此格式Q&A文件应该可以导入到supermemo中,作为一个单词库。
老夫试了一下发现单词都出来了,就是中文部分要不是乱码要不就是空白,说明文件格式是正确的,就是可能答案部分的编码不正确的原因,需要研究一个supermemo 2006的Q&A txt文件的格式。

替换命令如下


:[范围]s/from/to/[选项]


[范围]:


如果不输入,则为当前行。也可以是形如1,30表示1到20行。%表示全文搜索。.表示当前行。$表示最后一行。所以可以用.,$表示当前行到最后一行


[选项]:


g所有匹配项,c确认替换



from部分:


*    任意次匹配


\+    匹配一次以上


\=    匹配0次或一次


\{3,5} 匹配3到5次


\|    或者


\&    二个并列的同时匹配


\d    数字


\D    非数字


\x    十六进制数


\X    非十六进制数


\s    空白字符


\S    非空白字符


\l      小写字母


\L    非小写字母


\u    大写字母


\U    非大写字母


to部分:



反向引用\1...\9表示第一到第九个匹配的内容,\0整个匹配的内容

下面解释一下二个替换命令


:%s/\(\l\) \(ad\|vt\|vi\|a\|n\|v\)\./\1\rA: \2\./g
 1       2   ------------3---------   4 5      6   7
        --------8------------------ ------9---
1:%表示全局查找
7:g表示全部替换
2:一个小写字母
3:ad或者vt或vi或a或n或v
8:表示查找【小写字母+空格+ad.或者vt.或vi.或a.或n.或v.】
4:第一个匹配内容即2
5:换行
6:第二个匹配内容即3
9:表示替换为【匹配的小写字母+换行+A:+空格+匹配的ad.或者vt.或vi.或a.或n.或v.】
如:
9.slip v.
滑动,滑落;忽略
替换为

9.slip
A: v. 滑动,滑落;忽略

:%s/\d\+\./\rQ: /g
 1    -2--- -3---
1:%表示全局查找
2:表示查找以一个以上数字+.
3:表示替换为换行+Q:空格
如:
9.slip
替换成

Q: slip


没有评论: