我在查找/替換一些十六進制字符時遇到了一些麻煩。我想下面的十六進制字符串的文件內更換所有實例:使用sed替換十六進制字符串
0x0D4D5348
與以下十六進制字符串:
0x0D0A4D5348
我怎麼能這樣做?
編輯:我試圖做一個十六進制查找/替換。輸入文件中沒有「0x0D4D5348」的文字值,但它具有ASCII碼錶示。
我在查找/替換一些十六進制字符時遇到了一些麻煩。我想下面的十六進制字符串的文件內更換所有實例:使用sed替換十六進制字符串
0x0D4D5348
與以下十六進制字符串:
0x0D0A4D5348
我怎麼能這樣做?
編輯:我試圖做一個十六進制查找/替換。輸入文件中沒有「0x0D4D5348」的文字值,但它具有ASCII碼錶示。
GNU的sed v3.02.80,GNU sed的V1.03,和霍華德赫爾曼 HHsed V1.5都支持符號\xNN
,其中 「NN」 是兩個有效的十六進制數字,00-FF。
這裏是如何在你的二進制文件替換HEX序列:
$ sed 's/\x0D\x4D\x53\x48/\x0D\x0A\x4D\x53\x48/g' file > temp; rm file; mv temp file
由於@sputnik指出的那樣,你可以用sed的in place
功能。一個警告不過,如果你使用它在OS/X,你就必須添加一組空引號:
$ sed '' 's/\x0D\x4D\x53\x48/\x0D\x0A\x4D\x53\x48/g' file
作爲OS的sed in place
/X takes a parameter指示要添加到文件名的擴展名是什麼當進行備份時,由於它確實是先創建一個臨時文件。但是然後.. OS/X的sed
doesn't support\x
。
這適用於Linux和OSX上的我。
更換就地:
sed -i '.bk' 's'/`printf "\x03"`'/foo/g' index.html
(見@在回答通過@tolitius歐內斯特的評論)
古代是一個相對術語......這幫了我很多謝謝。 – ojblass
我欣賞的徹底反應,但我想我是不太清楚。我想基本上用0x0D0A替換行結尾0x0D,但是我只想替換下一行開頭包含字符「MSH」(十六進制中的0x4D5348)的行尾。這是否更有意義? – Carter
編輯原始信息比期望其他讀者閱讀所有評論更好,希望找到修訂的規範。祝你好運! – shellter
感謝您的提示。問題修改。 – Carter