Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2325331
  • 博文数量: 145
  • 博客积分: 8668
  • 博客等级: 中将
  • 技术积分: 3922
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-09 21:21
个人简介

work hard

文章分类

全部博文(145)

文章存档

2016年(1)

2015年(1)

2014年(1)

2013年(12)

2012年(3)

2011年(9)

2010年(34)

2009年(55)

2008年(20)

2007年(9)

分类: LINUX

2009-04-29 17:34:06

4.范 例

本节列出数个 Regular Expression 的应用简例, 供读者参考. 由这些范例中, 读者可一窥实际应用时, 如何藉由 Regular Expression 来表达字符串, 来完成 某些目的. 至于各指令像 vi, sed, awk, ...中之语法说明已非本文所能涵盖, 读者请自行参考相关书籍.

a. 将档案中所有字符串 ``Regular Expression'' 或 ``Regular expression'' 换成 ``Regexp''.
以 vi 编辑该档案, 并在 vi 命令输入模式下执行 :
:1,$ s/ Regular [Ee]xpression/Regexp/g
b. 将档案中所有具 ``ddd-dddd'' 特征的字符串(d表阿拉伯数字)之前插入字符串 ``Tel :''.
以 vi 编辑该档案, 并在, vi 命令输入模式下执行 :
:1,$ s/[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]/Tel:&/g
说明 : `` &'' 代表执行时实际合于该 Regular Expression 的字符串.
c. 将档案中所有俱有 `` program数字.c'' 特征的字符串换成 ``test数字.f''.
解法 : 以vi编辑该档案, 并在vi命令输入mode下执行 :
:1,$ s/ program\([0-9][0-9]**\)\.c/test\1.f/g
说明 : Regexp `` [0-9][0-9]*'' 表示一位或一位以上的阿拉伯数字. `` \1'' 被找到的字符串中的数值部分. (被\(...\)括住的部分).
d. 将档案中第5-13行, 整个区域往右移5格(空格符).
解法 : 以vi编辑该档案, 并在vi命令输入mode下执行
:5,13 s/ .*/ &/

说明 : Regexp `` .*" 用以 match 整个数据列(之后以&表之). 并用 `` &''(5个空白及原先之资料列)取代该列资料.
e. 将上例档案中的数据列(5-13行), 往左移回3格.
解法 : 以vi编辑该档案, 并在vi命令输入mode下执行
:5,13 s/ \^ ///

说明 : 将行首的三个空格符换成空字符串.
f. 试从一个档案的全名中分离出其路径及文件名.

解法 : 编辑如下的script并取名为 ``sepname''
awk '
BEGIN {
match( ARGV[1], /.*\//)
print "path=", substr(ARGV[1], 1 ,RLENGTH-1)
print "name=", name = substr(ARGV[1], RLENGTH+1 )
} ' $1 }

执行 $ sepname /usr/local/bin/xdvi
结果印出 path= /usr/local/bin
name= xdvi
g. 将档案中以``From''或``from''为行首的数据打印出
执行 $ awk '/^[Ff]rom/ ' 数据文件文件名

h. 去除挡案中空白行
执行 $ sed -e "/ ^$/d"

后 语
虽然 Regular Expression 仅是一种字符串的表示方式, 但从上列的范例 中不难窥出, 配合接受 Regular Expression 的指令或工具, 其应用面 将远超出找寻字符串及置换字符串. 使用 Regular Expression 不仅扩大了 字符串的表达能力, 让使用者很容易进行字符串判断; 使数据处理的过程便 为更为迅速便利.
阅读(2357) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~