Wfr命令详解资料.docx
《Wfr命令详解资料.docx》由会员分享,可在线阅读,更多相关《Wfr命令详解资料.docx(27页珍藏版)》请在冰豆网上搜索。
![Wfr命令详解资料.docx](https://file1.bdocx.com/fileroot1/2022-10/7/4191f500-bfe7-4fd9-a184-4ad566d0290a/4191f500-bfe7-4fd9-a184-4ad566d0290a1.gif)
Wfr命令详解资料
简介
wfr
-支持多国语言的字符串批量查找和替换
-批量字符集编码转换
∙纯unicode规则匹配内核,真正支持各国语言文字的正则匹配。
∙带有兼容性检查的字符集编码转换功能。
同时支持libiconv(iconv.dll)、IBMlibicu和Windows自带的字符集编码转换API。
∙支持TCL8.2兼容的高级正则表达式(ARE)。
∙支持一次性指定多个文件通配符和文件列表。
∙支持管道模式,与其它命令协同工作;支持半管道模式,从文件中获取输入,但将结果写到标准输出。
∙支持包含子目录。
∙支持普通匹配、正则匹配、可忽略大小写、可跨行匹配。
替换时可以使用正则的子表达式。
∙同时支持posix标准的扩展正则表达式及perl风格的正则匹配。
∙可以格式化替换内容为全大写或全小写,便于在批处理中对环境变量和命令行参数做大小写一致化处理。
∙支持DOS(Windows)、Macintosh和unix风格的换行符,可选择自动识别(默认)或手动指定。
∙统计功能,列出每个文件中的替换次数、总替换次数等。
∙支持Win32和纯DOS环境(纯DOS环境中需要HXDOSExtender支持)。
∙支持POSIX环境,提供linuxx86/x64、FreeBSD、NetBSD、Solaris等版本下载。
更新历史
2013-11-19,Ver2.3.9-1119
UPD:
在-s模式下,默认忽略无法访问的子文件夹。
2009-12-13,Ver2.3.6.1213
NEW:
新增-errstop参数。
使用此参数时,遇到无法访问的文件和子目录会报错并自动终止查找。
不使用此参数时,fr会自动跳过无法访问的子目录。
对于无法读写的文件,fr会输出一行报错信息,但不会终止搜索。
2009-03-12,Ver2.3.5.0312
FIX:
修正了在使用/r或/ric参数并且使用ARE'p'和's'模式进行匹配时,'^'有时仍然会匹配行首的问题。
例如:
在dos格式的文件中,/r:
"***:
(?
p)(^.*)\n"会匹配所有行,而不仅仅是文件的第一行。
UPD:
现在-exp默认为开启状态,要禁用此选项,需要指定-noexp开关。
2008-09-09,Ver2.3.4.0909
UPD:
增强了正则行首锚点'^'的适应性。
2008-09-08,Ver2.3.3.0908
FIX:
纠正了正则表达式零长匹配时会出现无限循环的问题(例如,在内容“aaa.bbb”中将“[^.]*”替换为“z”)。
FIX:
纠正了正则行首锚点解析不正确的问题(例如,在内容“ccc”将“^c”替换为“z”)。
2008-08-16,Ver2.3.2.715
新增高级正则表达式(ARE)支持
2007-01-20,Ver2.3.1.120
新增-exp选项,开启该选项后,程序的内存使用量将增加一倍,但是在很多情况下,其处理速度将得到极大改善。
碰到性能问题的弟兄们可以试试。
该算法使用额外的内存消除了原地替换时带来的内存抖动,所以文件中要替换的值越多,算法带来的性能提升就越明显。
在siwen@CCF兄提供给我的样本上测试,开启了-exp选项以后,fr完成任务的时间从1小时降低到1.5秒(文件体积8.5MB,文件中需要替换的项目为25万项)。
所谓Unicode正则匹配
wfr内部使用完全基于UNICODE的高效正则引擎,能够完成各种国际化条件的正则匹配。
以下举例说明:
∙小写类能够正确匹配各国小写字母。
如:
中文全角字母“abcd”;希腊字母“α、β、ω”;俄文字母“ж、я、щ”等等。
∙大写类能够匹配各国大写字母。
如:
全角字母“ABCD”;希腊字母“Α、Β、Ω”;俄文字母“Ж、Я、Щ”等等。
∙字符类能匹配各国字母(中日韩的汉字也属于该类)。
∙标点类能够匹配各国标点符号,如:
“、,。
……『』”等等。
∙所有操作都支持宽字符,例如,表达式:
“[我你他她它]们”将被正确处理。
其它(数字、空白符、词边界等等)以此类推,全方位支持多语言。
以上字符分类的规则遵循UNICODE标准分类(UNICODEGeneralCategoryValues)具体请参考:
http:
//www.unicode.org/versions/Unicode4.0.0/ch04.pdf。
关于UNICODE正则的操作效率,这个引擎比我能找到的所有开源的非UNICODE匹配引擎至少快一倍左右(因为所有字符类的匹配都是直接查表映射的,都是标准O
(1)算法)。
不过这只是匹配引擎的效率,由于所有文件在“匹配->替换”前后都要做一次编码转换,所以典型应用下,wfr效率比fr低一些。
wfr并不是fr的升级版,能够用fr搞定的任务不推荐用wfr完成。
关于字符集编码
wfr支持分别指定三个参量的字符集编码:
1.输入编码:
输入文件或管道中内容的字符集编码。
默认为当前系统的默认代码页。
2.输出编码:
完成搜索->替换操作后,要输出到目标文件或管道中的编码。
默认与输入编码相同。
3.参数编码:
指定搜索和替换参数的内容使用何种字符集编码。
默认为当前系统的默认代码页。
例如:
“wfr*.txt*.htm-r:
"[иウ]"-t:
"狟ね"-encarg:
big5-encin:
gbk-encout:
utf-8-s”把当前目录和所有子目录下的任何txt及htm文件中的“[你我他她它]们”都替换为“朋友们”;文件的编码为:
gbk,参数使用 big5 指定,替换后将文件格式改为 utf-8 编码保存。
咋一看指定参数编码好像没用,其实不然。
例如在异种语言环境下(如在中文系统下操作韩文)的搜索替换;在DOS下使用wfr(DOS的系统默认代码页永远是ASCII)等场合,指定参数编码是很有意义的。
关于字符集转换功能库,如果当前系统搜索路径中存在GUN的libiconv库(iconv.dll),则优先使用libiconv,否则使用操作系统自带的字符集转换API。
这样做的考虑如下:
∙更严谨和稳定的结果:
iconv比Windows的字符集转换API更严格,不会出现意想不到的乱码和连篇问号等情况。
∙更有保障的支持:
Windows能否成功完成指定字符集编码转换,很大程度上取决于用户是否安装了相关的代码页文件。
在任何部署了libiconv库的计算机中,该库支持的字符集编码都能够被正确地转换。
∙跨平台支持:
libiconv可以用于几乎所有已知的平台。
典型应用
∙在命令行中单独使用,或作为管道过滤器使用。
例如:
“wfr*.txt*.htm-r:
"张(\a+/>)"-t:
"李\1"”将文档中所有姓张的兄弟姐妹改为姓李:
)
∙在批处理中应用。
∙与其它工具配合使用。
以上每种应用都可以分为三种情况讨论:
∙单纯的搜索替换。
∙单纯的字符集编码匹配和转换。
∙以上两种情况的混合应用。
简单中文帮助
C:
\DocumentsandSettings\Administrator>
#wfr
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
简单中文帮助
C:
\DocumentsandSettings\Administrator>
#wfr
===============================================================================
widefindandreplaceVer2.3.9-1119byBaiYang/2004-2013,免费软件
主页地址-
===============================================================================
在文件或管道中批量搜索-替换字符串——支持多字符集编码
用法:
wfr[文件通配符1文件通配符2...]{查找选项:
查找内容}{替换选项:
替换为}
[其它选项]
===============================================================================
查找选项:
-f:
-匹配精确串
-fic:
-匹配精确串(忽略大小写)
-r:
-正则表达式匹配
-ric:
-正则表达式匹配(忽略大小写)
-rnnl:
-跨行正则匹配
-rnnlic:
-跨行正则匹配(忽略大小写)
-any-匹配文件或管道中的所有内容,主要用于完成单纯的批量字符集编码转换
===============================================================================
替换选项:
-t:
-将匹配的内容替换为指定字符串
-tu:
-先将指定的“替换为”字符串变为大写,然后开始替换
-tl:
-先将指定的“替换为”字符串变为小写,然后开始替换
注意:
如果您正在使用正则匹配,那么您可以在“替换为”字符串中使用子表达式代换
(\0~\9)
===============================================================================
字符编码选项:
-encin:
-指定输入文本(文件或管道)的字符集编码。
默认值:
使用当前操作系统的默认代码页。
-encout:
-指定输出(结果)文本的字符集编码。
默认值:
与"-encin"指定的值相同。
-encarg:
-指定搜索和替换选项的内容使用何种字符集编码。
默认值:
使用当前操作系统的默认代码页。
-unisign-如果输出指定为UNICODE宽字符编码(如:
UCS-2,UTF-8/16等),则在文
件头部加入BOM签名,这样支持unicode的文本编辑器将会自动识别该文
件的编码格式。
-listenc-列出所有wfr支持的字符集编码。
-listcmp-列出wfr认可的键入字符集编码转换规则表。
-force-强制实施转换,忽略编码兼容性规则。
===============================================================================
其它选项:
-h-?
-当前屏幕
-s-包含子目录
-exp-启用内存扩展算法,将会加倍wfr的内存使用量,但是很多时候可以极大地
提高执行效率。
现已默认开启。
-noexp-禁用内存扩展算法,参考:
-exp选项的说明。
-stdin-从标准输入设备获得要查找的内容,并将结果从到标准输出设备(如果未指
定任何文件模板的话,则自动启用该选项)
-stdout-像平时一样,从文件中获得输入,但将结果送到标准输出(而不是写回文
件)
-frc-显示每个文件内发生的替换次数
-trc-显示所有文件总