免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發新帖
查看: 77331 | 回復: 14
打印 上一主題 下一主題

perl 怎么以16進制操作文件,替換文件內容? [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(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, 下載次數: 25)


如果不想在CU掃描下載的話,我在這里也傳了一份附件 : doora.qiniudn.com/vSREh.gz   (下載后請重命名為file.gz)

論壇徽章:
0
2 [報告]
發表于 2016-08-14 11:26 |只看該作者
我這Win10中cmd執行不了 這個命令。
你在正則表達式最后加一個s看是否可行 ,就是多行模式。
.*//gs

論壇徽章:
0
3 [報告]
發表于 2016-08-14 16:57 |只看該作者
回復 2# hztj2005


    加了s也沒用。

論壇徽章:
307
程序設計版塊每周發帖之星
日期: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
4 [報告]
發表于 2016-08-14 18:17 |只看該作者
本來想用處理字符串的方式匹配刪除, 好像我給想簡單了. 我搞不定, 幫頂.

論壇徽章:
145
技術圖書徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期: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未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [報告]
發表于 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

   

評分

參與人數 1信譽積分 +5 收起 理由
523066680 + 5 很給力!

查看全部評分

論壇徽章:
307
程序設計版塊每周發帖之星
日期: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
6 [報告]
發表于 2016-08-16 00:13 |只看該作者
回復 5# jason680
大神, 向您請教下 用文件句柄的方式 讀取這個二進制文件 咋搞啊, 好像和處理普通文本的方式有很大出入呀. 還請您指點, 謝謝了.

   

論壇徽章:
0
7 [報告]
發表于 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下執行?

論壇徽章:
145
技術圖書徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期: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未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [報告]
發表于 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.

            ...

論壇徽章:
145
技術圖書徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期: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未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
9 [報告]
發表于 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
10 [報告]
發表于 2016-08-16 14:25 |只看該作者
回復 5# jason680


    可行,解決了困擾我兩天的問題。

感謝大神!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則 發表回復

  

北京盛拓優訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區
中國互聯網協會會員  聯系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP
   日韩综合区视频第一页导航,无码JK粉嫩小泬在线观看,午夜精品A片一区二区三区,日日躁夜夜躁狠狠躁麻豆,大胆国模,免费观看无遮挡www的网站