我如何从这个输出中去除奇数字节?

我如何从这个输出中去除奇数字节?

所以,对于我的统计课,我一直使用很多 Linux 技巧来组织我的数字,复制/粘贴它们等等。现在,直到最近我都没有遇到任何问题...我从 Open Office 中复制粘贴了一堆值(可能是罪魁祸首),并试图像这样格式化它们...

echo "5  8  6  25  4  21  10  1  24  12  4  16  
9  2  12  28  14  17  12  1  16  18  18  3  
12  6  6  12  10  20  9  6  8  6  8  15" | sed 's/\s\+/\n/g' | grep -v ^$ | sed 's/[[:space:]]*$//g' > test.txt

这样可以将每个数字放在自己的行上,但是当我将其粘贴到 statdisk 中时,出现了一些无效字符错误。它似乎是一个空格,但我尝试使用 sed 和 tr 以及 [:space:]、[:blank:] 等变体,以及 s/[ \t]*$//g 之类的东西来尝试删除末尾的所有内容(我可以在 Vim 中轻松删除)。但 CLI 上没有任何效果。

对该文件运行十六进制转储会给我

5   �   �  \n   8   �   �  \n   6   �   �  \n   2   5   �   �

这些到底是什么? hexdump -C

35 c2 a0 0a 38 c2 a0 0a  36 c2 a0 0a 32 35 c2 a0  |5...8...6...25..|

有人知道那些 c2 a0 字节是什么吗?有没有一种简单/优雅的方法可以用 sed 或 tr 之类的东西将它们删除?或者,由于是非 ascii,我是否需要对字节操作进行一些巧妙的操作……有什么想法/建议吗?

答案1

c2a0是 UTF-8U+00A0,无间断空格。您可以轻松使用tr来删除它们,例如,

> echo -n $'5\u00a0 8\u00a0 6' | tr -d $'\u00a0' | xxd
00000000: 3520 3820 36                             5 8 6

请注意,\u转义仅在 Bash 4.2+ 中有效,但当然您可以用 替换$'\xc2\xa0'

相关内容