2014-11-23 81 views
1

創建一個命名爲test包含以下內容的文件:如何在刪除字節時爲vim中的「xxd -r」創建一個有效的輸入?

abcdefabcdef 

我想與使用XXD的刪除第一個0。用vim -b test打開它,然後在vim中運行:%!xxd。其結果是:

0000000: 3031 3233 3435 3637 3839 6162 6364 6566abcdef 
0000010: 3031 3233 3435 3637 3839 6162 6364 6566abcdef 
0000020: 0a          .  

然後我刪除的十六進制代碼爲30第一0

0000000: 31 3233 3435 3637 3839 6162 6364 6566abcdef 
0000010: 3031 3233 3435 3637 3839 6162 6364 6566abcdef 
0000020: 0a          . 

然後我跑:%!xxd -r讀六角回來。結果是:

^@23456789abcdef^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ 

結果是亂碼。我知道原因是上述內容不是有效的xxd輸入。如果我刪除的行號和文本部分:

31 3233 3435 3637 3839 6162 6364 6566 
3031 3233 3435 3637 3839 6162 6364 6566 
0a 

的我跑:%!xxd -r -p讀六角回來。結果是正確的:

123456789abcdefabcdef 

有沒有更好的方法來使用vim和xxd來完成這項工作?更好的方式意味着更少的編輯來爲xxd -r製作有效的輸入。

+1

是否要刪除第一列?試試':%!xxd -p' – kev 2014-11-23 08:56:16

+0

對於像'test'這樣的小文本文件,':%!xxd -p'起作用。但如果我想刪除大文本文件中的一些字符。如果沒有行號和文本部分,很難知道要刪除哪些十六進制代碼。 – 2014-11-23 09:01:04

回答

3

你已經發現你自己刪除字節偏移列和文本列允許你使用:%!xxd -r -p來得到你想要的。那麼如何創建一個自定義命令來刪除這些列,然後進行轉換?無論如何,:%!xxd -r -p太多了。

喜歡的東西:

:command MyXXDR %s#^[^:]*: \(\%(\x\+ \)\+\) .*#\1# | %!xxd -r -p 

這個確切的命令可能會導致問題,如果你搞砸了文件太多了您的修改的格式(即,如果替換命令不匹配,除去必要的文字),但你明白了。

相關問題