标题: 命令行怎么用16进制的字符替换文件内容?change也不行的
[打印本页]
作者: okace
时间: 2008-11-4 17:30
标题: 命令行怎么用16进制的字符替换文件内容?change也不行的
请问如何在命令行,用任意长度的16进制字符,替换任意文件?
我试了change,用 &h 可以替换较短的16进制字符,但是整条命令超过128字符就不能运行了。
其他类型的软件也可以,不一定要dos程序,win程序也可以,只要能支持命令行替换,这样只要一行命令(或多行)就自动替换。
对了,替换的16进制字符长度可能超过1K的。
不知道意思有没有表达清楚。找了一整天了,快晕了。请帮忙!
[
Last edited by okace on 2008-11-4 at 17:41 ]
作者: okace
时间: 2008-11-4 17:33
好像sed也不行的,它的替换貌似仅支持16进制的数字和字母,其他的字符就不行了。
作者: HAT
时间: 2008-11-4 17:41
转帖仅供参考,未测试是否可行。
http://upload.cn-dos.net/img/1051.zip
wide find and replace Ver 2.3.1.120 by BaiYang / 2004 - 2007, 免费软件
主页地址 - 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-8/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:"朋友们"
作者: okace
时间: 2008-11-4 17:53
楼上的,刚去作者网站认真看了帮助,不过明显不支持16进制字符的替换啊。
change filename /from &H0F0F0F0F /to &H0D0D0D0D
需要能直接输入16进制字符,可惜change的命令行长度要小于128字节,否则退出执行,55555555
[
Last edited by okace on 2008-11-4 at 18:18 ]
作者: HAT
时间: 2008-11-4 18:21
标题: Re 4楼
用change的话,一定要一次替换那么长的字符吗?分开替换能否满足要求?
能否给出真实数据来说明一下替换之前和替换之后,文本内容是啥样的?
作者: okace
时间: 2008-11-4 18:46
change aa.jwn /from "&h180000000C00000000000000000000000000803F0C" /to "&h180000000C00000000000000000000000000803F0C000000080000000000C03F0000004008"
上面是要替换的内容,而且远远不止这么短。。。
附件是要处理的文件,不是文本内容。
上面的内容替换的地址是 偏移量2A11,不过这个地址不是确定的,可能变动。
附件
1:
AA.rar (2008-11-4 18:46, 1.2 K,下载次数: 17)
作者: yishanju
时间: 2008-11-5 11:55
我听说好像是批处理最长只支持128位字符
超长的字符不能拆分成几次替换么
作者: yishanju
时间: 2008-11-5 11:56
如果实在不行。。。建议你用PYTHON 写脚本实现吧。