我们学英语和其他语言时,常常能从网上下载一些词汇列表,我们可以凭此背诵单词。词汇列表的格式通常是以下格式:
Apple n. 苹果,苹果公司
...
我们在制作 word 词汇列表时,通常没有遵循严格的分隔符规范(以水平制表符或逗号分隔英文和中文解释,这两个符号是 Excel 或 wps 表格打开文本文件时默认使用的分隔符),而是一般使用空格分隔。且外文词组、中文释义之间通常也有空格。这样从 word 文档转换成 Excel 文件时,常常不能正确地分隔英文和中文释义,因为 Excel 导入外部文件时,是以逗号或水平制表符作为分隔符的。
为解决以上问题,我们使用 Linux 下的 sed 命令,在英文和中文之间加上正确的分隔符(如水平制表符):
我们用 wps office 制作词汇表,并导出为 excel 文件。
下面是 word 词汇表文件原文
-
首先把 word 词汇表文件保存为纯文本文件。
- 然后打开命令行终端,使用 sed 命令进行替换操作
$ sed 's#\([0-9a-zA-Z,:!+- ]*\)\(.*\)#\1\t\2#g' word.txt > word2.txt
这里我们使用了正则表达式的分组功能,把每条词汇前面的英文解释分成一组,把后面的中文解释分成一组,在替换模式中调用这个两个分组(\1 调用第一个分组,\2 调用第二个分组),并在它们之间插入一个 \t (水平制表符),word2.txt 是替换后的文件。
注意:
- 不要重定向到原来的文件本身。
- [0-9a-zA-Z,:!+- ]* 表示中括号中的任意一个字符出现0到多次。该表达式选取了词条中除中文字符以外的所有字符。在该表达式中
- 0-9 这样的表达式相当于把 0123456789 罗列出来,
- 同理 a-zA-Z 表示罗列出所有大小写英文字母。
- [字符列表] 表示使用字符列表中的任意一个字符
- 表示 * 前面的字符出现 0 到 多次
-
用 wps 表格打开 word2.txt,即可看到已正确的把英文单词和中文释义放到了两列中,把它另存为 Excel 格式就完成了。
小技巧
- 选择水平制表符或是使用逗号作为分隔符根据实际词汇表的内容决定,比如如果词汇表中已经使用逗号作为常规字符,就不适合选用它作为分隔符了。
- 当词条结构较多时,构建正则表达式时,可以多做几个分组,在几个分组中插入水平制表符作为分隔符,就可以在 Excel 表格中插入多列
- 像德语这样的小语种,可以在构造的正则表达式中加入英文字符集中缺少的那几个字母。
最近发现,使用 word 或 wps 本身的 "替换" 功能也可完成相同的任务
如图所示:
- 查找字符串是 ([0-9a-zA-Z]{1,}) (*) 。表示把词条按照空格分成两个分组,第一组是单词本身,第二组是词性和中文解释。
- 替换字符串是\1^t\2,即在第一个分组和第二个分组中间用水平制表符替换了空格字符。
然后,如上把 word 文档存储成纯文本格式,然后用 Excel 程序打开该文本文档,保存成 excel 格式即可。
注: 本方法不适合单词中出现空格的情况,比如单词的位置出现了一个词组,且组成词组的单词之间以空格分隔,这样的话,替换后,将在词组中的第一个单词和第二个单词之间插入一个水平制表符。