我有一个 100M 行文件,它有一些编码问题——“最初”是 EBCDIC,保存为 US-ASCII,现在是 UTF-8。我对它的传统了解不多,抱歉——我刚刚被要求分析内容。
EBCDIC 中的“cents”字符在此文件中随机“隐藏”,导致各种错误。这是关于这个臭虫的更多信息:十六进制中的美分字符
使用 iconv -f foo -t UTF-8 -c 转换此文件不起作用 - 美分字符占优势。
当我使用十六进制编辑器时,我可以找到 0xC2 0xA2 (c2a2) 的外观。但在大文件中,这并不理想。Sed 在十六进制级别不起作用,所以...不确定 tr - 我只将它用于回车/换行。
我可以使用什么 linux 实用程序/命令在非常大的文件上合理快速地查找和删除此字符?
2部分:
1 -- utility / command to find / count the number of these occurrences (octal \242)
2 -- command to replace (this works tr '\242' ' ' < source > output )
文本如何出现在我的 ubuntu 终端上:
1019EQ?IT DEPT GENERATED
使用 xxd,它在十六进制级别的外观(侧面的 ascii 看起来与上面相同):
0000000: 3130 3139 4551 a249 5420 4445 5054 2047 454e 4552 4154 4544 0d0a
使用 xxd,“显示 ebcdic”的外观如何——这里,只是从侧面显示 ebcdic:
......s.....&....+........
所以十六进制“a2”是罪魁祸首。我现在正在尝试 xxd -E foo | grep a2 计数实例。
为感兴趣的人添加来自 od -ctxl 而不是 xxd 的输出:
0000000 1 0 1 9 E Q 242 I T D E P T G
31 30 31 39 45 51 a2 49 54 20 44 45 50 54 20 47
0000020 E N E R A T E D \r \n
45 4e 45 52 41 54 45 44 0d 0a