【发布时间】:2017-07-05 15:55:51
【问题描述】:
我有一个 UTF-8 数据文件,其中包含一些意外的 UTF-8 字符序列,会中断数据处理。我需要用空格或任何安全字符替换这个序列(数据来自外部来源):
In Hex: E2 80 8B (​)
在 bash 脚本中,如何使用命令行工具(如 sed 或 replace 命令)替换这些字符?我试过了:
sed 's/​/ /g' file_1 > file_2
但它不起作用(没有替换数据)。是否有一种特殊的语法可以用“hex”字符而不是 ascii 字符来指定正则表达式? 是否可以使用 3 字节序列执行“二进制”替换?
注意:文件是 UTF-8 编码的,所以我认为搜索真实序列有问题,因为不是 utf-8(3 字节 ASCII)
【问题讨论】:
-
你能解释一下那个字节序列是“坏的UTF-8”吗?并且不使用“ascii”这个词?
-
这对我不好,我更喜欢使用“意外”。转换过程正在删除字符。
-
我已经搜索并找到“使用 sed 替换十六进制字符串”stackoverflow.com/questions/7760717/… 并尝试使用序列
's/\xE2\x80\x8B/ /g',它似乎有效。
标签: regex bash replace sed utf-8