如何使用sed复制十六进制格式的行?

问题描述 投票:0回答:1

我有一个内存转储文件,我可以在 Sublime 中以十六进制格式查看它,它如下所示:

7f45 4c46 0201 0100 0000 0000 0000 0000
0400 3e00 0100 0000 0000 0000 0000 0000
4000 0000 0000 0000 a003 2900 0000 0000
0000 0000 4000 3800 1600 4000 1800 1700
0400 0000 0400 0000 1005 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000

我正在编写一个脚本来将内存转储划分为文件,每个文件仅包含一页(我的系统上为 4096,在 sublime 上应转换为 256 行)。我尝试了以下方法:

  • 我尝试使用 sed 复制行
    sed -n -e "${start},${end}p" $file1.dmp > $file2.dmp
    这种方法的问题是 sed 的行数计数似乎与 sublime 不同。即使当我尝试将
    $start
    $end
    都设置为 1 时,我也会得到巨大的输出(比原始文件少很多,但肯定不是一行)。
  • 我尝试使用 head 至少复制文件的第一页
    head -n $num $file1.dmp > $file2.dmp
    。它似乎与 sed 有同样的问题,复制的行数与 sublime 不同。
  • 我尝试使用带有特定数量(-b 或 -c)字节或字符的 cut,与 head 和 sed 相同。
    cut -c 1-$num $file1.dmp > $file2.dmp
  • 还尝试 colrm 复制一行,我在这方面取得了一些进展!当我使用
    cat $file1.dmp | colrm $num > $file2.dmp
    时,在file2中我发现当
    7f
    等于1时为
    $num
    ,当
    7f45
    等于2时为
    $num
    ,当
    7f45 4c
    等于3时为
    $num
    ,但是当它4 岁我发现了这个:

7f45 4c46 0201 0100 0000 0000 0000 0000
0400

随着数字变高,它仍然表现得很奇怪,突然添加两个十六进制数字或整行!

  • 我尝试使用 wc 选项 -c、-m 和 -l(分别是字节、字符和行)只是为了计算原始文件中的数字,数字与应有的数字完全不同。

我已经用尽了我的选择,我认为部分问题是所有这些命令都将文件视为 utf8 并且对空字符表现不正确。无论如何,有什么方法可以将一个十六进制文件正确复制到另一个文件吗?

linux bash sed text-processing memory-dump
1个回答
2
投票

split
可以按字节数分割文件。

split -b 4K -d memory.dmp page
© www.soinside.com 2019 - 2024. All rights reserved.