![我如何从这个输出中去除奇数字节?](https://linux22.com/image/1473159/%E6%88%91%E5%A6%82%E4%BD%95%E4%BB%8E%E8%BF%99%E4%B8%AA%E8%BE%93%E5%87%BA%E4%B8%AD%E5%8E%BB%E9%99%A4%E5%A5%87%E6%95%B0%E5%AD%97%E8%8A%82%EF%BC%9F.png)
所以,对于我的统计课,我一直使用很多 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'
。