All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
ASP.NET,AJAX,学习笔记1_[Asp.Net教程]
C#多线程:不同线程之间通过事件委托封送调用方法_[Asp.Net教程]
C#应用:用Split()方法提取字符_[Asp.Net教程]
.Net,2.0,原汁原味读取注册表_[Asp.Net教程]
ASP.NET&Spring.NET&NHibernate最佳实践(四)——第3章人事子系统(1)_[Asp.Net教程]
ASP.NET,AJAX中的异步Web,Services调用_[Asp.Net教程]
学习PHP:详解mysql4.0以后的编码配置_php资料_编程技术
SQL Server 2005重新安装不上的问题及其解决_[SQL Server教程]
如何在PHP程序中防止盗链_[PHP教程]
Asp.net生成静态网页的实现代码_[Asp.Net教程]
Reading number is top 10 pictures
刘亦菲写真集1
毕姥爷事件,告诉你6条真理
Sora aoi in China4
Look for from human art net, is good1
美洲杯宝贝的雨中风情2
Female model behind the bitterness, often being overcharged2
Beauty Sun Feifei
哥斯达黎加的门将是如何练成的
Original author said, this is the Hengyang people
非常漂亮的泳装美女
Download software ranking
The Bermuda triangle3
VC++6.0简体中文版
asp.net技术内幕
SQL2000 For 4IN1
圣殿祭司的ASP.NET.2.0.开发详解-使用C#
Be there or be square
Boxer vs Yellow5
XML+Web+Service开发教程
天龙八部十二宫服务端
C#编程思想
aaa published in(发表于) 2013/12/27 20:01:47 Edit(编辑)
代码批量替换工具_php资料_编程技术

代码批量替换工具_php资料_编程技术

[Perl]文字/代码批量替换工具_php资料_编程技术-你的首页-uuhomepage.com

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=]*>[\s\S]*?<\/iframe> 匹配模式,相当于命令行参数 -m 的默认值。
-m=]*>[\s\S]*?<\/iframe> 同上。
Insensitive 忽略匹配内容的字母大小写,相当于命令行参数 -I。
-I 同上。
Global 全局查找要匹配的内容,相当于命令行参数 -G。
-G 同上。
Replacement=

bound0

替换的内容,相当于命令行参数 -r 的默认值。
-r=

bound0

同上。
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=

    bound0


    (此处的 Replacement=

    bound0

    将作为历史配置保留,不再生效。)

    如果在配置文件的多行中出现同样的项目,以最后出现的设置为准,例如:
    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,"{
    while()
    {
    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="]*>[\\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;
    }

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

    sub cFile
    {
    my $fi;
    ($fi)=@_;
    if(opendir(DIR, $fi))
    {
    my @dir=readdir(DIR);
    closedir DIR;
    if("\\" eq substr $fi,(length $fi)-1){$fi=substr($fi,0,(length $fi)-1)}
    my @subdirs= grep { /^(?!\.)/ && -d "$fi\\$_" } @dir;
    foreach my $subdir (@subdirs)
    {
    cFile("$fi\\$subdir")
    }
    @files = grep { /$checktyp/i && -T "$fi\\$_" } @dir;
    foreach my $fil (@files)
    {
    my $bp='';
    $bp=(substr $fi,(length $gi))."\\";
    my $bi="$fi\\$fil";
    my $bo=$go.$bp.$fil;
    remove($bi,$bo)
    }
    }
    }
    unless("\\" eq substr $go,(length $go)-1){$go.="\\"}
    if(-d $gi)
    {
    unless("\\" eq substr $gi,(length $gi)-1){$gi.="\\"}
    cFile($gi);
    }
    else
    {
    my $bu=substr $gi,(rindex $gi,'\\');
    my $bo=$go.$bu;
    remove($gi,$bo)
    }

    print "\nProcess Finished!";
    print "\n-i:$gi";
    print "\n-o:$go";
    print "\n-m:$match";
    if($except){print "\n-e:$except"}
    if($replacement){print "\n-r:$replacement"}
    sub remove
    {
    my $bi;
    my $bo;
    ($bi,$bo)=@_;

    print "\nprocessing $bi ...\n";
    unless(open(INPUT,"<$bi")){print "\n[Warn] Can not open the file <$bi>: $!";return}
    my @conts = ;
    close INPUT;
    my $cont=join '',@conts;
    my $c;
    if($insensitive)
    {
    if($global)
    {
    unless($cont=~s/($match)/${$c=Cexcept($1)}$c/gi){die "$!"}
    }
    else
    {
    unless($cont=~s/($match)/${$c=Cexcept($1)}$c/i){die "$!"}
    }
    }
    else
    {
    if($global)
    {
    unless($cont=~s/($match)/${$c=Cexcept($1)}$c/g){die "$!"}
    }
    else
    {
    unless($cont=~s/($match)/${$c=Cexcept($1)}$c/){die "$!"}
    }
    }
    unless(open(OUT, ">$bo"))
    {
    if($!==2)
    {
    my $dbo=substr $bo,0,(rindex $bo,'\\');
    if(opendir(OUTDIR,$dbo)){closedir OUTDIR;print "\n[Warn] Can not open the output file <$bo>: $!";exit}
    else
    {
    if($!==2)
    {
    unless(pmkpath($dbo)){print "\n[Warn] Can not creat the output directory <$dbo>: $!";exit}
    unless(open(OUT,">>$bo")){print "\n[Warn] Can not open the output file <$bo>: $!";exit}
    }
    else{print "\n[Warn] Can not open the output directory <$dbo>: $!";exit}
    }
    }
    else{print "\n[Warn] Can not open the output file <$bo>: $!";exit}
    }

    print OUT "$cont";
    close OUT;
    }
    sub pmkpath
    {
    my @p=split(/\\/,shift);
    my $pa=$p[0];
    my $m=$#p+1;
    my $t;
    for($t=1; -e $pa;$t++){$pa.='\\'.$p[$t]}
    unless(mkdir $pa){return 0}
    for(;$t<$m;$t++)
    {
    $pa.='\\'.$p[$t];
    unless(mkdir $pa){return 0}
    }
    return 1
    }
    sub Cexcept
    {
    unless($except){return $replacemen}
    my $con;
    ($con)=@_;
    if($con=~/$excep/){return $con}else{return $replacemen}
    }

    样例网页 D:\test\2007\04\06\TEST.htm

    引用:
    wwwwwwwwwwwwwwwwwww
    uuuuuuuuu
    yyyyyyyyyyyyyyyyyyyyyy
    wwwwwwwwwwwwwwwwwww
    uuuuuuuuu
    yyyyyyyyyyyyyyyyyyyyyy

    将配置文件 batchReplace.set 与 batchReplace.exe 置于同一目录下。

    引用:
    Match=]*>[\s\S]*?<\/iframe>
    Insensitive
    Global
    Except=http://www.blueidea.com/
    CheckType=.htm|.html

    运行命令 batchReplace.exe -i d:\test -o d:\result\123\456

    程序会检查d:\test及其子目录下的所有带.htm、.html扩展名的文件。创建输出路径D:\result\123\456\,将结果输出到其中,并复制原有的目录结构。

    生成结果:
    D:\result\123\456\2007\04\06\TEST.htm

    引用:
    wwwwwwwwwwwwwwwwwww
    uuuuuuuuu
    yyyyyyyyyyyyyyyyyyyyyy
    wwwwwwwwwwwwwwwwwww
    uuuuuuuuu
    yyyyyyyyyyyyyyyyyyyyyy





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.