ddc
联网
平面设计 画册 VI欣赏 包装 CG-插画 搜索 个人网页 Alexa排名 CSS 建站资源 下载专区 JS特效 品牌服装 服装院校 专题欣赏 SEO 图标欣赏 专题
上海网站建设 网站建设 域名注册 虚拟主机 广州网站设计 域名注册 广州网站建设 上海网站建设 虚拟主机 广州网页设计 虚拟主机 域名注册 acg ACG玩家 品牌设计
求创科技
网站建设
中国互联
投稿
素材出售
中国设计秀
中资源
当前位置:网络学院首页 >> 编程开发 >> php >> [Perl]文字/代码批量替换工具

[Perl]文字/代码批量替换工具 (1)

来源:中国设计秀    作者:    点击:24     加入收藏    发表评论
0
顶一下

Perl脚本batchReplace.pl可以用来批量替换文件中的文字/代码。可在指定目录中查找指定类型的文件,并递归检查子目录;在输出文件时复制输入文件的目录结构。

附件Win32应用程序batchReplace.exe 是由Perl脚本编译产生的可执行程序,不需安装Perl运行环境即可执行。

在命令行中使用

batchReplace.exe[ -i 输入文件路径(或包含文件的目录)][ -o 输出文件位置(文件或目录)][ -c 批量输入文件的扩展名,以“.”开始,多个扩展名之间以“|”隔开][ -m 匹配模式][ -I(忽略匹配内容的字母大小写)][ -G(全局查找要匹配的内容)][ -e 例外的字符串,是对匹配模式的补充,如果在匹配结果中发现有这样的字符串,做不匹配处理][ -r 替换的内容]

上述参数没有顺序限制。当 -o 参数所涉及的文件路径不存在时,会自动创建。当输出文件已经存在时,文件原有的内容将被覆盖。(安全起见,请不要输出到输入文件的原始位置,以免造成不可恢复的损失。)

例如:
batchReplace.exe -i d:\gaoshu1 -o d:\do\123\456 -e http://www.blueidea.com/

通过配置文件 batchReplace.set 设置参数

配置文件中可包含以下设置项目(格式范例,注意大小写):

Input=E:\fna\                 指定输入路径,相当于命令行参数 -i 的默认值。
-i=E:\fna\                    同上。
Output=E:\dnaWalks\           指定输出路径,相当于命令行参数 -o 的默认值。
-o=E:\dnaWalks\               同上。
Match=<iframe[^>]*>[\s\S]*?<\/iframe>  匹配模式,相当于命令行参数 -m 的默认值。
-m=<iframe[^>]*>[\s\S]*?<\/iframe>  同上。
Insensitive                   忽略匹配内容的字母大小写,相当于命令行参数 -I。
-I                            同上。
Global                        全局查找要匹配的内容,相当于命令行参数 -G。
-G                            同上。
Replacement=<h1>bound0</h1>   替换的内容,相当于命令行参数 -r 的默认值。
-r=<h1>bound0</h1>            同上。
Except=http://www.blueidea.com/ 例外的字符串,如在匹配结果中发现有这样的字符串,做不匹配处理,相当于命令行参数 -e 的默认值。
-e=http://www.blueidea.com/   同上。
CheckType=.htm|.html          当输入参数设为目录时,处理目录中包含的具有这些扩展名的文本文件(递归检查子目录)。相当于命令行参数 -c 的默认值。
-c                            同上。

每行放置一个项目。除内容之间不要有多余的空格或引号。
除必要的输入输出外,所有的设置项目都是可选的。命令行参数会覆盖相应的默认值。如果在配置文件中不包含Match或CheckType,会启用内置的默认值(同上面示例中给出的值)。Replacement默认为空字符,将匹配内容替换为空字符,也就是将匹配内容清除。

欲在batchReplace.set中保留历史配置时,可在参数前放置任意非空白字符以取消其作用。例如:

  • 2007/04/06 Insensitive
    (此处的 Insensitive 将作为历史配置保留,不再生效。)
  • 2007/04/06 Replacement=<h1>bound0</h1>
    (此处的 Replacement=<h1>bound0</h1> 将作为历史配置保留,不再生效。)

如果在配置文件的多行中出现同样的项目,以最后出现的设置为准,例如:
CheckType=.htm|.html
CheckType=.jsp
-c=.asp|.php
将设置CheckType的值为.asp|.php,也可以利用这个特性保留历史配置,方便调试。

这个脚本写得比较仓促(是挤出吃晚饭的时间写的),以后有时间我还会改进。因此转载请注明出处,并注意更新。

免责声明:作者不承担用户因使用此工具而造成的任何意外损失。

下载batchReplace.rar  已编译为可执行文件

#file:batchReplace.pl
#author:Bound0
#created:2007-04-06
#first published: http://bbs.blueidea.com/viewthread.php?tid=2734388

my  $match;
my  $replacement='';
my  $insensitive=0;
my  $global=0;
my  $gi;
my  $go;
my  $Checktype=".htm|.html";
my  $except;

if(open(setfile,"<batchReplace.set"))
{
    while(<setfile>)
    {
        if(/^\s*-I/){ $insensitive=1}
        if(/^\s*-G/){ $global=1}
        if(/^\s*-m=(.+)/){ $match= $1}
        if(/^\s*-r=(.+)/){ $replacement= $1}
        if(/^\s*-e=(.+)/){ $except= $1}
        if(/^\s*-i=(.+)/){ $gi= $1}
        if(/^\s*-o=(.+)/){ $go= $1}
        if(/^\s*-c=(.+)/){ $Checktype= $1}
        if(/^\s*Insensitive/){ $insensitive=1}
        if(/^\s*Global/){ $global=1}
        if(/^\s*Match=(.+)/){ $match= $1}
        if(/^\s*Replacement=(.+)/){ $replacement= $1}
        if(/^\s*Except=(.+)/){ $except= $1}
        if(/^\s*Input=(.+)/){ $gi= $1}
        if(/^\s*Output=(.+)/){ $go= $1}
        if(/^\s*CheckType=(.+)/){ $Checktype= $1}
    }
}

my  $para=' '.join(' ',@ARGV);
if( $para=~/ -I */){ $insensitive=1}
if( $para=~/ -G */){ $global=1}
my @ti=split(/ -i */, $para);
if( $ti[1]){( $gi)=split(/ -(o|i|c|e|m|r|I|G)/, $ti[1])}
unless( $gi){print "No \"Input path\" parameter!";exit}
my @to=split(/ -o */, $para);
if( $to[1]){( $go)=split(/ -(o|i|c|e|m|r|I|G)/, $to[1])}
unless( $go){print "No \"Output path\" parameter!";exit}
my @tc=split(/ -c */, $para);
if( $tc[1]){( $Checktype)=split(/ -(o|i|c|e|m|r|I|G)/, $tc[1])}
my @te=split(/ -e */, $para);
if( $te[1]){( $except)=split(/ -(o|i|c|e|m|r|I|G)/, $te[1])}
my @tr=split(/ -r */, $para);
if( $tr[1]){( $replacement)=split(/ -(o|i|c|e|m|r|I|G)/, $tr[1])}

unless( $match){ $match="<iframe[^>]*>[\\s\\S]*?<\\/iframe>";
 $insensitive=1;
 $global=1}

my @tm=split(/ -m */, $para);
if( $tm[1]){( $match)=split(/ -(o|i|c|e|m|r|I|G)/, $tm[1])}
unless( $match){print "No \"Match Pattern\" parameter!";exit}

my  $checktyp='(';
 $Checktype=~s/\./\\\./g;
 $Checktype=~s/\|/\)\|\(/g;
 $checktyp.= $Checktype.') $';

my  $excep;
if( $except){
 $excep= $except;
 $excep=~s/\//\\\//g;
 $excep=~s/\./\\\./g;
 $excep=~s/\|/\\\|/g;
 $excep=~s/\[/\\\[/g;
 $excep=~s/\]/\\\]/g;
 $excep=~s/\(/\\\(/g;
 $excep=~s/\)/\\\)/g;
 $excep=~s/\ $/\\\ $/g;
 $excep=~s/\?/\\\?/g;
}

[1] [2]
2007-04-12 15:42:00    出处:
Google
热点文章/相关文章

音乐
嫁衣 画心 放生 天亮了 牡丹江 那滋味 擦肩而过 怀念过去 北京欢迎你 突然好想你 吻的太逼真 说好的幸福呢 坐上火车去拉萨 没有人比我更爱你
愚爱 心碎 稻香 带我走 醉赤壁 魔杰座 我还想她 明天过后 一定要爱你 等爱的玫瑰 原谅我一次 越单纯越幸福 最后一次的温柔 给我一首歌的时间
白狐 光荣 降临 下雨天 小酒窝 樱花草 恋爱新手 说唱脸谱 红色高跟鞋 寂寞才说爱 深深爱过你 爱上你是个错 即使知道要见面 不是因为寂寞才想你
城府 假如 花海 兰亭序 棉花糖 舍不得 最后一次 女人如烟 外滩十八号 我们的纪念 我们的无奈 心在跳情在烧 爱上你是我的错 爱情里没有谁对谁错
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明 | 网站公告 | 友情链接 | 留言 | 旧版入口