忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 37618 | 回复: 14

perl 怎么以16进制操作文件,替换文件内容? [复制链接]

论坛徽章:
0
发表于 2016-08-14 09:03 |显示全部楼层
本帖最后由 sofs 于 2016-08-14 09:05 编辑



左边是原文件,右边是我替换了内容后的文件。

我用的命令是 perl -p -i -e 's/\x48\x5c\x00\x00\x00\x00\x00\x00\x03\x80.*//g' ./file.gz

需求是要将左边 1 红框后面的内容全部删除掉。用了上面那个perl替换命令后,只是删除掉了一部分内容(右边空白处就是被删除的),而后面还有一大段内容没被删除(2)。

研究了很久,sed,tr这些都试了,没找到方法,求大神指点。

下面是原附件。

file.gz (2.31 KB, 下载次数: 2)

论坛徽章:
0
发表于 2016-08-14 11:26 |显示全部楼层
我这Win10中cmd执行不了 这个命令。
你在正则表达式最后加一个s看是否可行 ,就是多行模式。
.*//gs

论坛徽章:
0
发表于 2016-08-14 16:57 |显示全部楼层
回复 2# hztj2005


    加了s也没用。

论坛徽章:
298
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-08-14 18:17 |显示全部楼层
本来想用处理字符串的方式匹配删除, 好像我给想简单了. 我搞不定, 帮顶.

论坛徽章:
103
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07巳蛇
日期:2014-05-09 16:43:18巨蟹座
日期:2014-10-23 17:48:38子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59
发表于 2016-08-15 23:31 |显示全部楼层
回复 1# sofs

$ perl -pe 'BEGIN{$/=undef}{s/\x48\x5c\x00\x00\x00\x00\x00\x00\x03\x80.*//gs}' file.gz | hexdump -C
00000000  0f c9 50 a6 a2 e5 00 a2  e3 38 05 05 d3 5e 15 a9  |..P......8...^..|
00000010  32 b7 a0 00 b0 69 30 a5  43 2f 07 ef f8 73 5c 1a  |2....i0.C/...s\.|
...
000002d0  04 38 00 1f ea 00 30 4c  1a 2f 16 dd 6f ed d8 0c  |.8....0L./..o...|
000002e0  a1 f4 14 26 0d 80 33 80  5d a7                    |...&..3.].|
000002ea

   

论坛徽章:
298
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-08-16 00:13 |显示全部楼层
回复 5# jason680
大神, 向您请教下 用文件句柄的方式 读取这个二进制文件 咋搞啊, 好像和处理普通文本的方式有很大出入呀. 还请您指点, 谢谢了.

   

论坛徽章:
0
发表于 2016-08-16 01:04 |显示全部楼层
jason680 发表于 2016-08-15 23:31
回复 1# sofs

$ perl -pe 'BEGIN{$/=undef}{s/\x48\x5c\x00\x00\x00\x00\x00\x00\x03\x80.*//gs}' file ...


我在win10下执行这个语句,返回的是:

'$' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

是否只能在unix/Linux下执行?

论坛徽章:
103
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07巳蛇
日期:2014-05-09 16:43:18巨蟹座
日期:2014-10-23 17:48:38子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59
发表于 2016-08-16 08:40 |显示全部楼层
本帖最后由 jason680 于 2016-08-16 08:42 编辑

回复 6# sunzhiguolu

    binmode FILEHANDLE, LAYER
    binmode FILEHANDLE
            Arranges for FILEHANDLE to be read or written in "binary" or
            "text" mode on systems where the run-time libraries distinguish
            between binary and text files. If FILEHANDLE is an expression, the
            value is taken as the name of the filehandle. Returns true on
            success, otherwise it returns "undef" and sets $! (errno).

            
            On some systems (in general, DOS- and Windows-based systems)
            binmode() is necessary when you're not working with a text file.

            For the sake of portability it is a good idea always to use it
            when appropriate, and never to use it when it isn't appropriate.
            Also, people can set their I/O to be by default UTF8-encoded
            Unicode, not bytes.

            ...

论坛徽章:
103
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07巳蛇
日期:2014-05-09 16:43:18巨蟹座
日期:2014-10-23 17:48:38子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59
发表于 2016-08-16 08:49 |显示全部楼层
回复 7# hztj2005

1. 无Win10
有Win8

2. in Windows
  Don't use it in Windows

* you need modify the code into a script file by yourself

论坛徽章:
0
发表于 2016-08-16 14:25 |显示全部楼层
回复 5# jason680


    可行,解决了困扰我两天的问题。

感谢大神!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

久等啦!10张门票开启你的DTCC2017之旅

2017中国数据库技术大会将于2017年5月11-13日如约而至,本届大会以“数据驱动•价值发现”为主题,共设定2大主场和21个技术专场,云集海内外120+位技术大牛,共同探讨Oracle、MySQL、NoSQL、云端数据库、区块链、深度学习等领域的前瞻性热点话题。
即日起,填写DTCC2017会前调查问卷,即有机会赢取价值2600元的大会门票1张!仅限10张!
----------------------------------------
活动截止时间:2017年5月5日统一公布

问卷入口>>
  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP