精品技术论坛

精品技术论坛 (https://bbs.et8.net/bbs/index.php)
-   『软件使用』 (https://bbs.et8.net/bbs/forumdisplay.php?f=17)
-   -   【原创】命令行工具系列-8 批量文本替换工具,支持各种编码 (09-09) (https://bbs.et8.net/bbs/showthread.php?t=939287)

ASBai 2008-07-13 23:20:09

【原创】命令行工具系列-8 批量文本替换工具,支持各种编码 (09-09)
 
■ 2008-09-09 更新:
UPD: 增强了正则行首锚点 '^' 的适应性。

■ 2008-09-08 更新:
FIX: 纠正了正则表达式零长匹配时会出现无限循环的问题(例如,在内容“aaa.bbb”中将“[^.]*”替换为“z”)。
FIX: 纠正了正则行首锚点解析不正确的问题(例如,在内容“ccc”将“^c”替换为“z”)。

■ 2008-09-07 更新:
1. 修正了 -r, -rnnl 参数以及 -ric, -rnnlic 参数含义相互对调的问题。

■ 2008-09-06 更新:
1. 修正了 -encin 为 utf-8 或 ucs-2 时,-encout 不能自动判定的问题。
2. 正式支持高级正则表达式(ARE)模式,详情参见:这里

倒,论坛附件还是不能用啊,大家去这里下载更新吧:http://baiy.cn/utils/bwfr/index.htm

用法类似 wfr(http://bbs.et8.net/bbs/showthread.php?t=775619),
但可以从一个参数文件中同时指定多个查找/替换规则。例如:

1->a
2->b
3->c
4->d

等等。

支持环境变量扩展,例如:
dir->%SystemRoot%
 
简单说明
代码:

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

 
代码:

≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
简单中文帮助

C:\Documents and Settings\Administrator>
#bwfr

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

用法: bwfr [文件通配符1 文件通配符2 ...] {查找选项:查找内容} {-argfile:替换规则
          文件} [其它选项]

===============================================================================
查找选项:
  -f:      - 匹配精确串
  -fic:    - 匹配精确串(忽略大小写)
  -r:      - 正则表达式匹配
  -ric:    - 正则表达式匹配(忽略大小写)
  -rnnl:  - 跨行正则匹配
  -rnnlic: - 跨行正则匹配(忽略大小写)

===============================================================================
参数文件选项:
您应当使用参数文件来指定 "查找/替换" 对。参数文件中的每一行代表一个查找替换对,
例如:
  1->a
  2->b
  3->c
  4->d
  ...
  -argfile:- 指定参数文件路径
  -dlm:    - 指定查找/替换对中,'查找' 部分和 '替换' 部分之间的分隔符。
            默认:"->"
  注意: 如果您正在使用正则匹配,那么您可以在“替换”部分中中使用子表达式代换
        (\0 ~ \9)
  注意:您可以在参数文件中使用系统环境变量,例如:
        Dir->%SystemRoot%
  注意:您可以使用 '\r' 和 '\n' 来表示 '回车符' 和 '换行符',例如:
        1->a\r\n
        要输出 '\r' 和 '\n' 的字面值,可以使用 '\\r' 和 '\\n'。

===============================================================================
字符编码选项:
  -encin:  - 指定输入文本(文件或管道)的字符集编码。
              默认值: 使用当前操作系统的默认代码页。
  -encout: - 指定输出(结果)文本的字符集编码。
              默认值: 与 "-encin" 指定的值相同。
  -encarg: - 指定参数文件的内容使用何种字符集编码。
              默认值: 使用当前操作系统的默认代码页。
  -unisign - 如果输出指定为 UNICODE 宽字符编码 (如: UCS-2, UTF-8/16 等), 则在文
            件头部加入 BOM 签名,这样支持 unicode 的文本编辑器将会自动识别该文
            件的编码格式。
  -listenc - 列出所有 bwfr 支持的字符集编码。
  -listcmp - 列出 bwfr 认可的键入字符集编码转换规则表。
  -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=" 等效)

===============================================================================
应用示例:
  bwfr *.txt *.htm -fic -argfile:patterns.txt

此工具主要针对 frank 兄的 http://bbs.et8.net/bbs/showthread.php?t=937695 问题。:)

apie 2008-07-14 03:17:17

赞,收藏了

robot 2008-07-14 05:20:48

谢谢,正想找一个这样的命令行工具。

xcyfq 2008-07-14 07:10:36

看起来处理词库很好,下载了,发现自己的道行不够,不会用。
要是做成操作界面的更好,呵呵,方便了我等道行低的人~~意淫下。

jianlu 2008-07-14 08:32:06

随着图形界面的普及,愈来愈少用命令行了。

marking 2008-07-14 08:49:05

仰慕啊!!!

Huangwen 2008-07-14 08:49:35

好东西,收藏

ASBai 2008-07-14 11:16:47

引用:

作者: xcyfq (文章 9749354)
看起来处理词库很好,下载了,发现自己的道行不够,不会用。
要是做成操作界面的更好,呵呵,方便了我等道行低的人~~意淫下。

俺最不耐烦的事之一,就是画 GUI。即使有 RAD 可用,我还是觉得很不爽。;)

WanYanJun 2008-07-14 13:48:53

这下方便多了,之前总是用批处理解决。

Frank_001 2008-07-15 12:50:48

太感谢ASBai兄啦,马上下载过去用用看,:D

fatality 2008-07-15 13:49:13

.link 快捷方式文件,能用这个编辑吗?

venchia 2008-07-15 13:57:17

TextForever也可以批量替换,可惜不支持正则

而这个虽然支持正则,不过没界面好像也不方便

ASBai 2008-07-15 15:54:08

引用:

作者: fatality (文章 9751767)
.link 快捷方式文件,能用这个编辑吗?

.lnk 是二进制格式吧?你要替换里面的啥东西呢?

fatality 2008-07-15 17:07:26

引用:

作者: ASBai (文章 9751943)
.lnk 是二进制格式吧?你要替换里面的啥东西呢?

例如:把里面的"D:\", 改为"E:\"

copymix 2008-07-15 17:23:36

确实不错,就是人性化差了点


所有时间均为北京时间, 现在的时间是 09:54:29.

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

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