. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 关闭主题
 
主题工具
ASBai
 
ASBai 的头像
热心会员
 
资 料:
注册日期: May 2005
帖子: 5,166 声望值: 5
精华: 18,解答: 28
#1 旧 2006-08-05, 02:16:08 默认 【原创】【命令行工具系列-7】支持多语言的批量查找替换及编码转换工具[2007-01-20]
ASBai 当前离线  

wfr
  - 支持多国语言的字符串批量查找和替换
  - 批量字符集编码转换

 
2007-01-20, Ver 2.3.1.120

新增 -exp 选项,开启该选项后,程序的内存使用量将增加一倍,但是在很多情况下,其处理速度将得到极大改善。碰到性能问题的弟兄们可以试试。

该算法使用额外的内存消除了原地替换时带来的内存抖动,所以文件中要替换的值越多,算法带来的性能提升就越明显。在 siwen 兄提供给我的样本上测试,开启了 -exp 选项以后,fr 完成任务的时间从 1小时 降低到 1.5 秒(文件体积 8.5MB,文件中需要替换的项目为 25 万项)。

 
2006-09-15更新

主要是 libiconv(iconv.dll) 更新到了 1.11 (多谢 donaldtone 兄提醒 ),wfr 也就跟着更新了一下,在兼容性检查表加入了新版 iconv 中最新支持的 BIG5-HKSCS 系列扩展(1999、2001 和 2004)编码,其它没什么变化。

 
功能简介
  • 纯 unicode 规则匹配内核,真正支持各国语言文字的正则匹配。
  • 带有兼容性检查的字符集编码转换功能。同时支持 GUN libiconv(iconv.dll) 和 Windows 自带的字符集编码转换 API。
  • 支持一次性指定多个文件通配符和文件列表。
  • 支持管道模式,与其它命令协同工作;支持半管道模式,从文件中获取输入,但将结果写到标准输出。
  • 支持包含子目录。
  • 支持普通匹配、正则匹配、可忽略大小写、可跨行匹配。替换时可以使用正则的子表达式。
  • 同时支持 posix 标准的扩展正则表达式及 perl 风格的正则匹配。
  • 可以格式化替换内容为全大写或全小写,便于在批处理中对环境变量和命令行参数做大小写一致化处理。
  • 支持 DOS(Windows)、Macintosh 和 unix 风格的换行符,可选择自动识别(默认)或手动指定。
  • 统计功能,列出每个文件中的替换次数、总替换次数等。
  • 支持Win32和纯DOS环境(纯DOS环境中需要 HX DOS Extender 支持)。

 
所谓 Unicode 正则匹配

wfr 内部使用作者自己捣鼓的 UNICODE 正则匹配引擎。咳...咳..该引擎功能强大,效率出众,绝对是外出打鸟……(以下暂省10000字,有空再补上 )。

以下举例说明:
  • 小写类能够正确匹配各国小写字母。如:中文全角字母“abcd”;希腊字母“α、β、ω”;俄文字母“ж、я、щ” 等等。
  • 大写类能够匹配各国大写字母。如:全角字母“ABCD”;希腊字母“Α、Β、Ω”;俄文字母“Ж、Я、Щ”等等。
  • 字符类能匹配各国字母(中日韩的汉字也属于该类)。
  • 标点类能够匹配各国标点符号,如:“、,。……『』”等等。
  • 所有操作都支持宽字符,例如,表达式:“[我你他她它]们”将被正确处理。
其它(数字、空白符、词边界等等)以此类推,全方位支持多语言。以上字符分类的规则遵循UNICODE标准分类(UNICODE General Category Values)具体请参考: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 支持的字符集:使用 -listenc 参数可以查看 wfr 支持的字符集编码列表如下:
代码:

C:\Documents and Settings\Administrator>
#wfr /listenc

Name                Codepage   Description
===============================================================================
ANSI-Arabic         CP1256     Arabic - ANSI
ANSI-Baltic         CP1257     Baltic - ANSI
ANSI-CentralEuropean
                    CP1250     Central European - ANSI
ANSI-Cyrillic       CP1251     Cyrillic - ANSI
ANSI-Greek          CP1253     Greek - ANSI
ANSI-Hebrew         CP1255     Hebrew - ANSI
ANSI-LatinI         CP1252     Latin I - ANSI
ANSI-Thai           CP874      Thai - ANSI
ANSI-Turkish        CP1254     Turkish - ANSI
ARMSCII-8           CP1254     Armenian - ARMSCII
ASCII               CP437      English - ASCII (DOS OEM)
BIG5                CP950      Traditional Chinese - BIG5
BIG5-HKSCS          CP950      Traditional Chinese - BIG5-HKSCS
BIG5-HKSCS:1999     CP950      Traditional Chinese - BIG5-HKSCS:1999
BIG5-HKSCS:2001     CP950      Traditional Chinese - BIG5-HKSCS:2001
BIG5-HKSCS:2004     CP950      Traditional Chinese - BIG5-HKSCS:2004
EUC-CN              CP51936    Simplified Chinese - EUC
EUC-JP              CP51932    Japanese - EUC
EUC-KR              CP51949    Korean - EUC
EUC-TW              CP51950    Traditional Chinese - EUC
GB18030             CP54936    Simplified Chinese - GB18030
GB2312              CP20936    Simplified Chinese - GB2312
GBK                 CP936      Simplified Chinese - GBK
HZ                  CP52936    Simplified Chinese - HZ-GB2312
ISO-2022-CN         CP50227    Simplified Chinese - ISO-2022-CN
ISO-2022-CN-EXT     CP50227    Simplified Chinese - ISO-2022-CN-EXT
ISO-2022-JP         CP50220    Japanese - ISO-2022-JP
ISO-2022-JP-1       CP50221    Japanese - ISO-2022-JP-1
ISO-2022-JP-2       CP50222    Japanese - ISO-2022-JP-2
ISO-2022-KR         CP50225    Korean - ISO-2022-KR
ISO-646             CP20127    English - ASCII (ISO-646)
ISO-8859-1          CP28591    Latin 1 (West European) - ISO-8859-1
ISO-8859-10         CP28594    Latin 6 (Nordic) - ISO-8859-10
ISO-8859-11         CP874      Thai - ISO-8859-11
ISO-8859-13         CP28603    Latin 7 (Baltic Rim) - ISO-8859-13
ISO-8859-14         CP28591    Latin 8 (Celtic) - ISO-8859-14
ISO-8859-15         CP28605    Latin 9 (West European) - ISO-8859-15
ISO-8859-2          CP28592    Latin 2 (Central and East European) - ISO-8859-2
ISO-8859-3          CP28593    Latin 3 (South European) - ISO-8859-3
ISO-8859-4          CP28594    Latin 4 (North European / Baltic) - ISO-8859-4
ISO-8859-5          CP28595    Cyrillic - ISO-8859-5
ISO-8859-6          CP28596    Arabic - ISO-8859-6
ISO-8859-7          CP28597    Greek - ISO-8859-7
ISO-8859-8          CP28598    Hebrew - ISO-8859-8
ISO-8859-9          CP28599    Latin 5 (Turkish) - ISO-8859-9
JOHAB               CP1361     Korean - Johab
KOI8                CP20866    Russian - KOI8-R
KOI8-R              CP20866    Russian - KOI8-R
KOI8-U              CP21866    Ukrainian - KOI8-U
KSC                 CP949      Korean - Unified Hangeul Code
MacArabic           CP10004    Arabic - MAC
MacCentralEurope    CP10029    Central Europe - MAC
MacCroatian         CP10082    Croatian - MAC
MacCyrillic         CP10007    Cyrillic - MAC
MacGreek            CP10006    Greek - MAC
MacHebrew           CP10005    Hebrew - MAC
MacIceland          CP10079    Iceland - MAC
Macintosh           CP10029    Macintosh - MAC
MacRoman            CP10000    Roman - MAC
MacRomania          CP10010    Romania - MAC
MacThai             CP10021    Thai - MAC
MacTurkish          CP10081    Turkish - MAC
MacUkraine          CP10017    Ukraine - MAC
OEM-Arabic          CP864      Arabic - OEM
OEM-Baltic          CP775      Baltic - OEM
OEM-CanadianFrench  CP863      Canadian French - OEM
OEM-Cyrillic        CP855      Cyrillic (primarily Russian) - OEM
OEM-Greek           CP737      Greek (formerly 437G) - OEM
OEM-Hebrew          CP862      Hebrew - OEM
OEM-Icelandic       CP861      Icelandic - OEM
OEM-LatinI          CP850      Latin 1 (West European) - OEM
OEM-LatinII         CP852      Latin 2 (Central and East European) - OEM
OEM-ModernGreek     CP869      Modern Greek - OEM
OEM-MultilingualLatinI
                    CP850      Multilingual Latin 1 - OEM
OEM-MultlingualLatinI+EuroSymbol
                    CP858      Multlingual Latin I + Euro symbol - OEM
OEM-Nordic          CP865      Nordic - OEM
OEM-Portuguese      CP860      Portuguese - OEM
OEM-Russian         CP866      Russian - OEM
OEM-Turkish         CP857      Turkish - OEM
SHIFT_JIS           CP932      Japanese - SHIFT-JIS
TCVN                CP1258     Vietnamese - TCVN
TIS-620             CP874      Thai - TIS-620
UCS-2               CP1200     Unicode - UCS-2
UCS-2BE             CP1201     Unicode - UCS-2 Big-Endian
UCS-2LE             CP1200     Unicode - UCS-2 Little-Endian (BMP of ISO 10646)
UHC                 CP949      Korean - Unified Hangeul Code
UTF-16              CP1200     Unicode - UTF-16
UTF-16BE            CP1201     Unicode - UTF-16 Big-Endian
UTF-16LE            CP1200     Unicode - UTF-16 Little-Endian
UTF-7               CP65000    Unicode - UTF-7
UTF-8               CP65001    Unicode - UTF-8
VISCII              CP1258     Vietnamese - VISCII
字符集编码使用名称或代码页指定均可,并且不区分大小写。

不过,除了 UNICODE 类的超集字符集编码以外,每种编码所涵盖的语言文字符号范围都是有限的。对于可能会产生信息丢失的转换,我们叫做不兼容转换。意即:任何不可逆的转换都是不兼容转换。

使用 “-listcmp” 参数可以列出 wfr 遵循的编码转换兼容性规则表如下:
代码:

C:\Documents and Settings\Administrator>
#wfr /listcmp

-- Unicode Charset --
From                                    To
===============================================================================
<ANY>                                   GB18030
                                        UCS-2
                                        UCS-2BE
                                        UCS-2LE
                                        UTF-16
                                        UTF-16BE
                                        UTF-16LE
                                        UTF-7
                                        UTF-8

-- Standard English --
From                                    To
===============================================================================
ASCII                                   <ANY>
ISO-646

-- West European --
From                                    To
===============================================================================
ANSI-LatinI                             ANSI-LatinI
ISO-8859-1                              ISO-8859-1
ISO-8859-14                             ISO-8859-14
ISO-8859-15                             ISO-8859-15
ISO-8859-9                              ISO-8859-9
MacIceland                              MacIceland
MacRoman                                MacRoman
OEM-CanadianFrench                      OEM-CanadianFrench
OEM-Icelandic                           OEM-Icelandic
OEM-LatinI                              OEM-LatinI
OEM-MultilingualLatinI                  OEM-MultilingualLatinI
OEM-MultlingualLatinI+EuroSymbol        OEM-MultlingualLatinI+EuroSymbol
OEM-Portuguese                          OEM-Portuguese

-- Central and East European --
From                                    To
===============================================================================
ANSI-CentralEuropean                    ANSI-CentralEuropean
ISO-8859-2                              ISO-8859-2
MacCentralEurope                        MacCentralEurope
MacCroatian                             MacCroatian
MacRomania                              MacRomania
OEM-LatinII                             OEM-LatinII

-- South European --
From                                    To
===============================================================================
ANSI-Turkish                            ANSI-Turkish
ARMSCII-8                               ARMSCII-8
ISO-8859-3                              ISO-8859-3
ISO-8859-9                              ISO-8859-9
MacTurkish                              MacTurkish
OEM-Turkish                             OEM-Turkish

-- North European --
From                                    To
===============================================================================
ANSI-Baltic                             ANSI-Baltic
ISO-8859-10                             ISO-8859-10
ISO-8859-13                             ISO-8859-13
ISO-8859-4                              ISO-8859-4
OEM-Baltic                              OEM-Baltic
OEM-Nordic                              OEM-Nordic

-- Cyrillic --
From                                    To
===============================================================================
ISO-8859-5                              ISO-8859-5
KOI8                                    KOI8
KOI8-R                                  KOI8-R
KOI8-U                                  KOI8-U
MacCyrillic                             MacCyrillic
MacUkraine                              MacUkraine
OEM-Cyrillic                            OEM-Cyrillic
OEM-Russian                             OEM-Russian

-- Greek --
From                                    To
===============================================================================
ANSI-Greek                              ANSI-Greek
ISO-8859-7                              ISO-8859-7
MacGreek                                MacGreek
OEM-Greek                               OEM-Greek
OEM-ModernGreek                         OEM-ModernGreek

-- Arabic --
From                                    To
===============================================================================
ANSI-Arabic                             ANSI-Arabic
ISO-8859-6                              ISO-8859-6
MacArabic                               MacArabic
OEM-Arabic                              OEM-Arabic

-- Hebrew --
From                                    To
===============================================================================
ANSI-Hebrew                             ANSI-Hebrew
ISO-8859-8                              ISO-8859-8
MacHebrew                               MacHebrew
OEM-Hebrew                              OEM-Hebrew

-- Simplified Chinese --
From                                    To
===============================================================================
EUC-CN                                  EUC-CN
GB18030                                 GB18030
GB2312                                  GB2312
GBK                                     GBK
HZ                                      HZ
ISO-2022-CN                             ISO-2022-CN
ISO-2022-CN-EXT                         ISO-2022-CN-EXT

-- Traditional Chinese --
From                                    To
===============================================================================
BIG5                                    BIG5
BIG5-HKSCS                              BIG5-HKSCS
BIG5-HKSCS:1999                         BIG5-HKSCS:1999
BIG5-HKSCS:2001                         BIG5-HKSCS:2001
BIG5-HKSCS:2004                         BIG5-HKSCS:2004
EUC-TW                                  EUC-TW

-- Korean --
From                                    To
===============================================================================
EUC-KR                                  EUC-KR
ISO-2022-KR                             ISO-2022-KR
JOHAB                                   JOHAB
KSC                                     KSC
UHC                                     UHC

-- Japanese --
From                                    To
===============================================================================
EUC-JP                                  EUC-JP
ISO-2022-JP                             ISO-2022-JP
ISO-2022-JP-1                           ISO-2022-JP-1
ISO-2022-JP-2                           ISO-2022-JP-2
SHIFT_JIS                               SHIFT_JIS

-- Thai --
From                                    To
===============================================================================
ANSI-Thai                               ANSI-Thai
MacThai                                 MacThai
TIS-620                                 TIS-620

-- Vietnamese --
From                                    To
===============================================================================
TCVN                                    TCVN
VISCII                                  VISCII

-- GB Special --
From                                    To
===============================================================================
ANSI-Greek                              GB18030
EUC-CN                                  GB2312
EUC-JP                                  GBK
GB2312
ISO-2022-JP
ISO-2022-JP-1
ISO-2022-JP-2
ISO-8859-1
ISO-8859-5
ISO-8859-7
KOI8
KOI8-R
KOI8-U
MacCyrillic
MacGreek
MacUkraine
OEM-Cyrillic
OEM-Greek
OEM-ModernGreek
OEM-Russian
SHIFT_JIS

-- CJK Charset --
From                                    To
===============================================================================
BIG5                                    GB18030
BIG5-HKSCS                              GBK
BIG5-HKSCS:1999
BIG5-HKSCS:2001
BIG5-HKSCS:2004
EUC-CN
EUC-KR
EUC-TW
GB18030
GB2312
GBK
HZ
ISO-2022-CN
ISO-2022-CN-EXT
ISO-2022-KR
JOHAB
KSC
UHC
如果用户确实能保证正在进行有意义的转换,可以使用 “/force” 参数要求 wfr 忽略字符集编码兼容性检查。

此帖于 2007-01-20 12:39:25 被 ASBai 编辑. .


baiy.cn
俺的原创免费作品站
ASBai
 
ASBai 的头像
热心会员
 
资 料:
注册日期: May 2005
帖子: 5,166 声望值: 5
精华: 18,解答: 28
#2 旧 2006-08-05, 02:16:40 默认
ASBai 当前离线  

典型应用
  • 在命令行中单独使用,或作为管道过滤器使用。例如:“wfr *.txt *.htm -r:"张(\a+/>)" -t:"李\1"”将文档中所有姓张的兄弟姐妹改为姓李
  • 在批处理中应用。
  • 与其它工具配合使用。

以上每种应用都可以分为三种情况讨论:
  • 单纯的搜索替换。
  • 单纯的字符集编码匹配和转换。
  • 以上两种情况的混合应用。

 
帮助屏幕

代码:

C:\Documents and Settings\Administrator>
#wfr

===============================================================================
  wide find and replace Ver 2.3.1.120 by BaiYang / 2004 - 2007, Freeware
                           homepage - http://baiy.cn
===============================================================================
Find string in files or pipe, and replace it to another string With Multi-
charset encoding support.

USAGE: wfr [filePattern1 filePattern2 ...] {FindOption:StringToFind}
           {ReplaceOption:StringToReplacement} [OtherOptions]

===============================================================================
FIND OPTIONs:
  -f:      - find
  -fic:    - find ignore case
  -r:      - regular expresion find
  -ric:    - regular expresion find ignore case
  -rnnl:   - regular expresion find ignore newline
  -rnnlic: - regular expresion find ignore newline ignore case
  -any     - match anything in file, usually use to performing text encoding
             convertion

===============================================================================
REPLACE OPTIONs:
  -t:      - change the match to"StringToReplacement"
  -tu:     - make the "StringToReplacement" upper case, and change the match
             to it.
  -tl:     - make the "StringToReplacement" lower case, and change the match
             to it.
  -h -?    - Is screen
  NOTE: If find option you specified is a regular expresion method, the replace
        option will support sub expressions (\0-\9) as well.

===============================================================================
CHARSET ENCODING OPTIONs:
  -encin:  - specify charset encoding for the input text (file or pipe).
               DEFAULT: use current system's default codepage.
  -encout: - specify charset encoding for the output text.
               DEFAULT: same as "-encin".
  -encarg: - specify charset encoding of the find and replace options.
               DEFAULT: current system's default codepage.
  -unisign - if the output encoding is wide char (i.e. UCS-2, UTF-16, etc.),
             add BOM signature to the file.
  -listenc - list all accepted charset encoding names.
  -listcmp - list all compatible encoding convertion combination.
  -force   - enforce the text encoding convertion specified by "-encin" and
             "-encout", even if it is not compatible.

===============================================================================
OTHER OPTIONs:
  -s       - include sub folders
  -exp     - enable the memory expand algorithm, will double the memory usage,
             but MUCH quick in many case.
  -stdio   - get input from standard input device (keyboard and pipe),
             and put the results to standard output device.
             default when file pattern is omitted.
  -stdout  - get input from file(s) as normally, but put the results to
             standard output device.
  -frc     - show File Replacements Count
  -trc     - show Total Replacements Count

===============================================================================
POSIX and perl style Regular Expression:

  - "find - replace" fully support POSIX.2 Extended and Perl style Regular
     Expresion. Here is a list of they character classes:
       POSIX           perl       Description
       --------------------------------------------------------------------
       [:alnum:]                  letters and digits
       [:alpha:]       \a         letters
       [:lower:]       \l         lowercase letters
       [:upper:]       \u         uppercase letters
       [:blank:]                  space and tab characters
       [:space:]       \s         whitespace characters
       [:cntrl:]                  control characters
       [:digit:]       \d         decimal digits
       [:xdigit:]      \x         hexadecimal digits
       [:graph:]                  printable characters excluding space
       [:print:]       \p         printable characters including space
       [:punct:]                  punctuation characters

  - And here a some special char classes in perl:
       perl   POSIX equivalent  Description
       --------------------------------------------------------------------
       \o     [0-7]             octal digit
       \O     [^0-7]            non-octal digit
       \w     [[:alnum:]_]      word character
       \W     [^[:alnum:]_]     non-word character
       \A     [^[:alpha:]]      non-alphabetic character
       \L     [^[:lower:]]      non-lowercase character
       \U     [^[:upper:]]      non-uppercase character
       \S     [^[:space:]]      non-whitespace character
       \D     [^[:digit:]]      non-digit
       \X     [^[:xdigit:]]     non-hex digit
       \P     [^[:print:]]      non-printable characters
       \<     [^[:alpha:]_]     begin of word
       \>     [^[:alnum:]_]     end of word

  - note: posix char class must working in the square brackets. contrary,
          perl's must stay outside of the brackets.

  - And several alias has been created to help input some special char:
       perl style    POSIX style     Description
       -----------------------------------------------------------------------
       \"            [:dq:]          double quotation
       \'            [:sq:]          single quotation
       \t            [:tb:]          table
       \n            [:nl:]          new line (0x0A)
       \r            [:rt:]          return (0x0D)
       \b            [:bs:]          backspace

    NOTE: the posix style alias also available on /t, /tu and /tl when using
          the regex ("/r" and "/ric") match.

===============================================================================
SWITCH PREFIX and SUFFIX:
  * All switchs (options) are case-insensitive (i.e: "-fic:" or "-FIC:")
  * Switch Prefix can be either "-" or "/" (i.e: "/s" or "-s")
  * Switch Suffix can be either ":" or "=" (i.e: "/f:", "/f=", "-f:" or "-f=")

===============================================================================
EXAMPLEs:
  wfr *.txt *.htm -f:teh -t:the
  wfr *.txt -fic:"My Dir" -tu:"%ROOTDIR%"
  type server.log | wfr /r:"Connected.*218.79" /t:"**Attack** \0"
  type server.log | wfr /r:"^(Smith|James).*\n" /t
  unzip -l *.zip | wfr /r:"^(.{22}:\d\d\s*|(A|  \a| -|.*files$).*\n)" /t
  wfr *.txt /s /any /encin:gbk /encout:utf-8
  wfr *.log /any /encin:ucs-2 /encout:gbk /stdout | OtherApp.exe ...
  wfr *.txt *.htm -r:"张(\a+/>)" -t:"李\1"
  wfr *.txt *.htm -r:"[你我他她它]们" -t:"朋友们"

 
简单中文帮助

代码:

C:\Documents and Settings\Administrator>
#wfr

===============================================================================
  wide find and replace Ver 2.3.1.120 by BaiYang / 2004 - 2006, 免费软件
                      主页地址 - http://baiy.cn
===============================================================================
在文件或管道中批量搜索-替换字符串——支持多字符集编码

用法: wfr [文件通配符1 文件通配符2 ...] {查找选项:查找内容} {替换选项:替换为} 
          [其它选项]

===============================================================================
查找选项:
  -f:      - 匹配精确串
  -fic:    - 匹配精确串(忽略大小写)
  -r:      - 正则表达式匹配
  -ric:    - 正则表达式匹配(忽略大小写)
  -rnnl:   - 跨行正则匹配
  -rnnlic: - 跨行正则匹配(忽略大小写)
  -any     - 匹配文件或管道中的所有内容,主要用于完成单纯的批量字符集编码转换

===============================================================================
替换选项:
  -t:      - 将匹配的内容替换为指定字符串
  -tu:     - 先将指定的“替换为”字符串变为大写,然后开始替换
  -tl:     - 先将指定的“替换为”字符串变为小写,然后开始替换
  -h -?    - 当前屏幕
  注意: 如果您正在使用正则匹配,那么您可以在“替换为”字符串中使用子表达式代换 
        (\0 ~ \9)

===============================================================================
字符编码选项:
  -encin:  - 指定输入文本(文件或管道)的字符集编码。
               默认值: 使用当前操作系统的默认代码页。
  -encout: - 指定输出(结果)文本的字符集编码。
               默认值: 与 "-encin" 指定的值相同。
  -encarg: - 指定搜索和替换选项的内容使用何种字符集编码。
               默认值: 使用当前操作系统的默认代码页。
  -unisign - 如果输出指定为 UNICODE 宽字符编码 (如: UCS-2, UTF-16 等), 则在文件
             头部加入 BOM 签名,这样支持 unicode 的文本编辑器将会自动识别该文件
             的编码格式。
  -listenc - 列出所有 wfr 支持的字符集编码。
  -listcmp - 列出 wfr 认可的键入字符集编码转换规则表。
  -force   - 强制实施转换,忽略编码兼容性规则。

===============================================================================
其它选项:
  -s       - 包含子目录
  -exp     - 启用内存扩展算法,将会加倍 fr 的内存使用量,但是很多时候可以极大地
             提高执行效率。如果你碰到了性能问题,可以尝试开启该选项。
  -stdin   - 从标准输入设备获得要查找的内容,并将结果从到标准输出设备(如果未指
             定任何文件模板的话,则自动启用该选项)
  -stdout  - 像平时一样, 从文件中获得输入, 但将结果送到标准输出(而不是写回文
             件)
  -frc     - 显示每个文件内发生的替换次数
  -trc     - 显示所有文件总共发生的替换次数

===============================================================================
POSIX 和 Perl 风格的正则表达式:

  - "find - replace" 完整支持 POSIX.2 扩展标准及 Perl 风格的正则表达式。
    以下是支持的字符类及其对应关系:
       POSIX           perl       描述
       --------------------------------------------------------------------
       [:alnum:]                  字母和数字
       [:alpha:]       \a         字母
       [:lower:]       \l         小写字母
       [:upper:]       \u         大写字母
       [:blank:]                  空格和制表符
       [:space:]       \s         空白字符
       [:cntrl:]                  控制字符
       [:digit:]       \d         十进制数字
       [:xdigit:]      \x         十六进制数字
       [:graph:]                  可打印字符(不包括空白符)
       [:print:]       \p         可打印字符(包括空白符)
       [:punct:]                  标点符号

  - 以下是一些 perl 的特殊字符类:
       perl   POSIX等效         描述
       --------------------------------------------------------------------
       \o     [0-7]             八进制数字
       \O     [^0-7]            非八进制数字
       \w     [[:alnum:]_]      单词组成
       \W     [^[:alnum:]_]     非单词组成
       \A     [^[:alpha:]]      非字母 
       \L     [^[:lower:]]      非小写字母
       \U     [^[:upper:]]      非大写字母
       \S     [^[:space:]]      非空白符
       \D     [^[:digit:]]      非十进制数字
       \X     [^[:xdigit:]]     非十六进制数字
       \P     [^[:print:]]      非可打印字符
       \<     [^[:alpha:]_]     单词开始
       \>     [^[:alnum:]_]     单词结束

  - 注意: posix 字符类是必须工作在集合中的(“[”和“]”内)。相反,perl 风格
          的字符类是工作在集合运算之外的。

  - 此外,为了便于在命令行输入一些特殊字符,特别定义了一下别名:
       perl风格      POSIX风格       描述
       -----------------------------------------------------------------------
       \"            [:dq:]          双引号
       \'            [:sq:]          单引号
       \t            [:tb:]          制表符
       \n            [:nl:]          换行符 (0x0A)
       \r            [:rt:]          回车符 (0x0D)
       \b            [:bs:]          退格符

===============================================================================
开关的前缀和后缀:
  * 所有命令行开关(选项)都是大小写无关的(如: "-fic:" 和 "-FIC:")
  * 开关的前缀可以是 "-" 或 "/"(如: "/s" 和 "-s")
  * 开关的后缀可以是 ":" 或 "="(如: "/f:", "/f=", "-f:" 和 "-f=" 等效)

===============================================================================
应用示例:
  wfr *.txt *.htm -f:teh -t:the
  wfr *.txt -fic:"My Dir" -tu:"%ROOTDIR%"
  type server.log | wfr /r:"Connected.*218.79" /t:"**Attack** \0"
  type server.log | wfr /r:"^(Smith|James).*\n" /t
  unzip -l *.zip | wfr /r:"^(.{22}:\d\d\s*|(A|  \a| -|.*files$).*\n)" /t
  wfr *.txt /s /any /encin:gbk /encout:utf-8
  wfr *.log /any /encin:ucs-2 /encout:gbk /stdout | OtherApp.exe ...
  wfr *.txt *.htm -r:"张(\a+/>)" -t:"李\1"
  wfr *.txt *.htm -r:"[你我他她它]们" -t:"朋友们"


为了方便广大兄弟姐妹,偶特地上传了 iconv 库。在 Windows 中使用时,该库为推荐的可选组件。在 DOS 中使用时,iconv.dll 为必备组件——DOS 基本没用字符集编码转换能力。

使用时,将 iconv.dll 解压到任何系统搜索路径(如:C:\Windows 下)或 wfr 相同路径下即可。
上传的附件
文件类型: rar iconv.rar (511.3 KB, 168 次查看)
文件类型: rar wfr.rar (92.0 KB, 106 次查看)

此帖于 2007-01-23 23:39:21 被 ASBai 编辑. .
fjlyll
 
fjlyll 的头像
待认证激活
 
资 料:
注册日期: May 2002
帖子: 983 声望值: 2
精华: 0
#3 旧 2006-08-06, 17:25:11 默认
fjlyll 当前离线  

都没有人回复呀,我第一个支持兄弟
Spik3b
 
Spik3b 的头像
超级会员
 
资 料:
注册日期: Apr 2006
帖子: 1,283 声望值: 3
精华: 0,解答: 1
#4 旧 2006-08-06, 17:26:23 默认
Spik3b 当前离线  

支持下,这工具不错,我待会用来测试下,呵呵。


生活好累,好想放荡的生活啊。
lyka
 
lyka 的头像
荣誉版主
 
资 料:
注册日期: Aug 2002
帖子: 12,838 声望值: 2
精华: 4,解答: 9
#5 旧 2006-08-06, 17:27:56 默认
lyka 当前离线  

能不能写成图形界面的?这个完全是很难搞懂...


没有签名
ASBai
 
ASBai 的头像
热心会员
 
资 料:
注册日期: May 2005
帖子: 5,166 声望值: 5
精华: 18,解答: 28
#6 旧 2006-08-06, 18:33:38 默认
ASBai 当前离线  

引用:
作者: lyka
能不能写成图形界面的?这个完全是很难搞懂...
呃。。。参数好像是稍微复杂了点,不过很多是用到的时候才需要关心,平时用默认值就可以了。

多谢各位兄弟支持
dongfei
 
dongfei 的头像
超级会员
 
资 料:
注册日期: Sep 2002
帖子: 1,903 声望值: 3
精华: 1,解答: 3
#7 旧 2006-08-22, 09:54:11 默认
dongfei 当前离线  

我发现兄弟的很多工具都偏向linux、unix风格的,这个我觉得好像就是用的iconv来转化编码,不知道兄弟方便透露一下方便的联系方式么?比如msn,qq之类的,有些问题想请教一下。
youlq
 
youlq 的头像
超级会员
 
资 料:
注册日期: Apr 2001
帖子: 1,300 声望值: 1
精华: 0
#8 旧 2006-08-22, 10:38:53 默认
youlq 当前离线  

ASBai 的东东是一定要支持的! 看楼主的代码能学到不少东西啊


我辈当不了天下苍生的救世主,就当自己的救世主吧!
ASBai
 
ASBai 的头像
热心会员
 
资 料:
注册日期: May 2005
帖子: 5,166 声望值: 5
精华: 18,解答: 28
#9 旧 2006-08-22, 15:29:29 默认
ASBai 当前离线  

引用:
作者: dongfei
我发现兄弟的很多工具都偏向linux、unix风格的,这个我觉得好像就是用的iconv来转化编码,不知道兄弟方便透露一下方便的联系方式么?比如msn,qq之类的,有些问题想请教一下。
呵呵,也不是啦,libiconv 确实比 Windows 自带的字符集编码转换 API 有优势,所以优先考虑 iconv,如果系统中没有它才会去用 Win32 API。

MSN: asbai AT msn.com

引用:
作者: youlq
ASBai 的东东是一定要支持的! 看楼主的代码能学到不少东西啊
感谢兄弟支持!各位兄台日后如果有什么需要定做小工具解决的问题,只要在俺力所能及的范围内,俺很乐意为大家搞定。

此帖于 2006-08-22 15:32:49 被 ASBai 编辑. .
ken_liang
 
ken_liang 的头像
热心会员
 
资 料:
注册日期: Dec 2000
帖子: 1,448 声望值: 5
精华: 0
#10 旧 2006-08-22, 21:40:25 默认
ken_liang 当前离线  

很不错的工具,收藏先,谢谢啦
liziyu
 
liziyu 的头像
核心会员
 
资 料:
注册日期: Mar 2002
帖子: 3,897 声望值: 3
精华: 0,解答: 3
#11 旧 2006-08-23, 11:22:25 默认
liziyu 当前离线  

发现一个问题:
如果我要替换txt文件中的"##" ,变成 ||
提示我语法错误。可readme里面已经说了可以这样。
我的命令:wfr c:\1.txt -f:## -t:||

但是这样做没有问题: wfr c:\1.txt -r:"##" -t:"||"

我需要的结果是把 “##” 替换成 || 。。
请教一下


老老实实搞技术,踏踏实实做产品
liziyu
 
liziyu 的头像
核心会员
 
资 料:
注册日期: Mar 2002
帖子: 3,897 声望值: 3
精华: 0,解答: 3
#12 旧 2006-08-23, 12:33:56 默认
liziyu 当前离线  

问题解决。
使用\" ,特殊字符用\,我仔细看了readme,


东西不错。我要在服务器上用了。。呵呵。多谢楼主。。希望能进一步增加功能并继续完善。
samson88
 
samson88 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 2,358 声望值: 2
精华: 2,解答: 37
#13 旧 2006-08-23, 14:28:47 默认
samson88 当前离线  

偶需要一个加强版的本地目录列表工具,可以指定显示层数,可枚举目录下符合条件的任意文件(支持通配符)

比如 Turbotree fullpath /Lx /F *.exe,之后生成像tree.exe运行之后的效果

C:\DRIVERS
└─WIN
└─ETHERNET
├─BACS
├─TOOLS
│ ├─DRVINST
│ ├─UNATTEND
│ │ ├─IA32
│ │ ├─WIN2K
│ │ └─WINNT
│ └─UPDATE
│ └─WINNT
├─WIN2000
├─WINNT
└─WINXP


在中国,有什么事情解释不了的,一想到“”字就迎刃而解了。
ASBai
 
ASBai 的头像
热心会员
 
资 料:
注册日期: May 2005
帖子: 5,166 声望值: 5
精华: 18,解答: 28
#14 旧 2006-08-23, 15:53:43 默认
ASBai 当前离线  

没太明白老兄的意思,打完“Turbotree fullpath /Lx /F *.exe”以后是列出所有包含 exe 文件的目录?目录里面的 exe 文件不用列出来?
samson88
 
samson88 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 2,358 声望值: 2
精华: 2,解答: 37
#15 旧 2006-08-23, 21:13:09 默认
samson88 当前离线  

引用:
作者: ASBai
没太明白老兄的意思,打完“Turbotree fullpath /Lx /F *.exe”以后是列出所有包含 exe 文件的目录?目录里面的 exe 文件不用列出来?
就像tree.exe那样,没有 /F 仅列出目录结构,有 /F的话就列出指定目录中的结构和其中匹配的文件
发表新主题 关闭主题

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 05:41:56.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号