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水木清华站∶精华区