偶然发现了奇怪的 sed 行为,其中只有部分 HEX 序列被识别:
我正在尝试修复一个带有奇怪字符的字符串,并且在尝试十六进制替换时 sed 只找到前三个字符。
xxd输出带有问题字符的字符串:
6965 7261 f480 8488 6e6f 7761 6e61 2031 iera....nowana 1
我想f480 8488用可打印的字符替换这个序列,但 sed 只能识别前三个:
sed 's/\xf4\x80\x84/00/g' | xxd
6965 7261 3030 886e 6f77 616e 6120 3136 iera00.nowana 16
f480 84被正确替换为3030
然而
sed 's/\xf4\x80\x84\x88/00/g' | xxd
6965 7261 f480 8488 6e6f 7761 6e61 2031 iera....nowana 1
没找到f480 8488
如果我将 if 分成两个 sed 语句,sed 's/\xf4\x80/0/g' | sed 's/\x84\x88/0/g'一切正常
如果它正在寻找对,我会理解,但为什么只有三个而不是四个字符?