LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 906|回复: 3

请教一个用于替换的正则表达式?

[复制链接]
发表于 2005-6-7 01:23:43 | 显示全部楼层 |阅读模式
在我的一个程序中要把关键字替换为另一个,但要保持字母大小写,如 buirt 替换为 rtows,而同时buIrt替换为rtOws,BUIRT替换为RTOWS,Buirt替换为Rtows,等等,不知正则表达式如何写?
发表于 2005-6-7 08:48:16 | 显示全部楼层
这个合乎题意么?

[php]
#! /usr/bin/perl -w
use strict;

while (<>) {
        s/A/B/g;
        s/a/b/g;
        # ....
}
[/php]

Perl的差不多是这么写的吧,Shell编程可以用sed, awk之类,语法应该差不离,记不住了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-7 12:32:41 | 显示全部楼层
似乎不合。
原题条件只有两个单词是等长,但是否对应替换则未知。

在很多源码里用 grep -RIli buirt directoryname 得到一个大小写无关的包含buirt的文件列表,然后对这些文件进行替换。
搜索到buirt后替换为rtows,但要保持大小写。

我觉得这应该是一个很通用的问题,就是在修改源码时有gtk_filename替换为gtk2_filename,Gtk_*替换为Gtk2_*,GTK*替换GTK2*,诸如此类。

不知有人遇到过相同的问题没有,有没有一个看起来更简洁的办法呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-25 04:43:27 | 显示全部楼层
二楼的方法的确行不通。原题是需要整个单词换,二楼的方法会将所有A换为B,...

不过我自己也暂时没找到好方法。幸亏代码中只出现三类:全大写,全小写和首字符大写。

[PHP]#! /usr/bin/perl -w
use strict;

while (<>) {
        s/BUIRT/RTOWS/g;
        s/buirt/rtows/g;
        s/Buirt/Rtows/g;
}[/PHP]

然后用上grep,速度快些:

$ cd src
$ grep -RIli buirt . | xargs perl -pi -e 's/BUIRT/RTOWS/g; s/buirt/rtows/g; s/Buirt/Rtows/g;'

这的确是个通用型任务:各位有没有碰到过有时要给自己写的软件重命名呢?就是要将里面所关键字一起换掉啊。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表