BBS水木清华站∶精华区
□ 例
本节列出数个 Regular Expression 的应用简例, 供读者参考. 由这些□例中, 读者可
一窥实际应用时, 如何藉由 Regular Expression 来表达字串, 来完成 某些目的. 至
於各指令像 vi, sed, awk, ...中之语法说明已非本文所能涵盖, 读者请自行参考相关
书籍.
* a. 将档案中所有字串 ``Regular Expression'' 或 ``Regular expression'' 换
成 ``Regexp''.
o 以 vi 编辑该档案, 并在 vi 命令输入模式下执行 :
:1,$ s/ Regular [Ee]xpression/Regexp/g
* b. 将档案中所有具 ``ddd-dddd'' 特徵的字串(d表阿拉伯数字)之前插入字串
``Tel :''.
o 以 vi 编辑该档案, 并在, vi 命令输入模式下执行 :
:1,$ s/[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]/Tel:&/g
o 说明 : `` &'' 代表执行时实际合於该 Regular Expression 的字串.
* c. 将档案中所有俱有 `` program数字.c'' 特徵的字串换成 ``test数字.f''.
o 解法 : 以vi编辑该档案, 并在vi命令输入mode下执行 :
:1,$ s/ program\([0-9][0-9]**\)\.c/test\1.f/g
o 说明 : Regexp `` [0-9][0-9]*'' 表示一位或一位以上的阿拉伯数字. ``
\1'' 被找到的字串中的数值部分. (被\(...\)括住的部分).
* d. 将档案中第5-13行, 整个区域往右移5格(空白字元).
o 解法 : 以vi编辑该档案, 并在vi命令输入mode下执行
:5,13 s/ .*/ &/
o 说明 : Regexp `` .*" 用以 match 整个资料列(之後以&表之). 并用 ``
&''(5个空白及原先之资料列)取代该列资料.
* e. 将上例档案中的资料列(5-13行), 往左移回3格.
o 解法 : 以vi编辑该档案, 并在vi命令输入mode下执行
:5,13 s/ \^ ///
o 说明 : 将行首的三个空白字元换成空字串.
* f. 试从一个档案的全名中分离出其路径及档名.
o 解法 : 编辑如下的script并取名为 ``sepname''
awk '
BEGIN {
match( ARGV[1], /.*\//)
print "path=", substr(ARGV[1], 1 ,RLENGTH-1)
print "name=", name = substr(ARGV[1], RLENGTH+1 )
} ' $1 }
o 执行 $ sepname /usr/local/bin/xdvi
o 结果印出 path= /usr/local/bin
name= xdvi
* g. 将档案中以``From''或``from''为行首的资料列印出
执行 $ awk '/^[Ff]rom/ ' 资料档档名
* h. 去除挡案中空白行
执行 $ sed -e "/ ^$/d"
後 语
虽然 Regular Expression 仅是一种字串的表示方式, 但从上列的□例 中不难窥出,
配合接受 Regular Expression 的指令或工具, 其应用面 将远超出找寻字串及置换字
串. 使用 Regular Expression 不仅扩大了 字串的表达能力, 让使用者很容易进行字
串判断; 使资料处理的过程便 为更为迅速便利.
BBS水木清华站∶精华区