如何使用 sed 复制十六进制格式的行?
How to copy lines of hexadecimal format using sed?
我有一个内存转储文件,我可以在 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
当$num
等于1时,7f45
当$num
等于2时,7f45 4c
当 $num
等于 3,但当它等于 4 时,我发现:
7f45 4c46 0201 0100 0000 0000 0000 0000
0400
随着数字越来越大,它仍然表现得很奇怪,突然添加两个十六进制数字或整行!
- 我用选项 -c、-m 和 -l(分别是字节、字符和行)尝试了 wc 只是为了计算原始文件中的数字,数字与应有的数字完全不同。
我已经用尽了我的选择,我认为部分问题是所有这些命令都将文件视为 utf8,并且对空字符的行为不正确。无论如何,有什么方法可以将一个十六进制文件正确地复制到另一个十六进制文件吗?
split
可以按字节数拆分文件。
split -b 4K -d memory.dmp page
我有一个内存转储文件,我可以在 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
当$num
等于1时,7f45
当$num
等于2时,7f45 4c
当$num
等于 3,但当它等于 4 时,我发现:
7f45 4c46 0201 0100 0000 0000 0000 0000
0400
随着数字越来越大,它仍然表现得很奇怪,突然添加两个十六进制数字或整行!
- 我用选项 -c、-m 和 -l(分别是字节、字符和行)尝试了 wc 只是为了计算原始文件中的数字,数字与应有的数字完全不同。
我已经用尽了我的选择,我认为部分问题是所有这些命令都将文件视为 utf8,并且对空字符的行为不正确。无论如何,有什么方法可以将一个十六进制文件正确地复制到另一个十六进制文件吗?
split
可以按字节数拆分文件。
split -b 4K -d memory.dmp page