我有一个包含空格字符的文件,无法使用 tr
或 sed
等命令行工具成功删除该字符。输入如下:
2, 78 ,, 1
6, 74, ,1
我希望输出看起来像:
2,78,,1
6,74,,1
尝试
如果我尝试 tr -d "[[:space:]]
结果是 2, 78,,16,74,,1
留下一个空格字符并删除换行符。
如果我尝试 sed 's/[[:space:]]//g'
结果是
2, 78,,1
6,74,,1
仍然留下空间。
我将字符串转换为十六进制,看起来有问题的字符是 a0
,但即使如此,结果也不是我所期望的:
sed 's/\xa0//g'
产量
2, �78 ,, 1
6, 74, ,1
问题
[[:space:]]
字符类未捕获的空白字符是什么?我怎样才能删除它?
最佳答案
offending character是一个UTF-8编码的不间断空格,用十六进制表示\xc2\xa0
。您可以使用
sed -E 's/[[:space:]]|\xc2\xa0//g'
说明
-E
打开扩展正则表达式以允许|
表示逻辑 OR's/pattern/replacement/'
将模式匹配替换为替换文本(在本例中为空字符串),/g
重复模式替换多个每行次数[[:space:]]
匹配大多数空白字符,包括空格和制表符\xc2\xa0
是 UTF-8 不间断空格的十六进制代码
关于sed - 无法使用 tr、sed 从字符串中删除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62601431/