![如何在 Unix 中显示大文件一行的十六进制值?](https://linux22.com/image/622512/%E5%A6%82%E4%BD%95%E5%9C%A8%20Unix%20%E4%B8%AD%E6%98%BE%E7%A4%BA%E5%A4%A7%E6%96%87%E4%BB%B6%E4%B8%80%E8%A1%8C%E7%9A%84%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E5%80%BC%EF%BC%9F.png)
我正在将数据从大型文本文件导入数据库,并在文件的 X 行上收到错误。如果我使用 less 查看器查看该行,则看不到任何异常,因为很可能该行包含不可打印的字符。然后我尝试 sed 该行并使用 hexdump 检查它:
sed -n 2540283p 30gb_large_file.fzp | hexdump -C
再次,很可能什么也没有,因为 sed 过滤掉了所有不可打印的字符。
有任何评论说我如何才能看到十六进制大文件的特定行上发生了什么吗?
答案1
sed
不应该是“[过滤] 掉所有不可打印字符”——你并没有告诉它这样做。事实上,对方便的二进制文件(FreeBSD 内核)进行的简单测试表明情况并非如此——sed
非打印字符顺利通过。
你竟然在没有先进行适当测试的情况下公开指责可怜的无辜者做了极其错误的事情,真是可耻
sed
——我会让你的内疚良心做出适当的悔改行为!
如果sed
没有输出任何内容,那是因为没有输出任何内容 —— 要么该行不存在(可能是文件突然结束 - 用 来检查?也许在某个不该出现的地方wc -l
有一个,而程序看到它时就会中止?)。 也可能有问题的行仅包含一个换行符或一个字符(应该会尽职尽责地返回,但在十六进制转储中对您没有多大用处)...EOF
NUL
sed