我想了解如何使用sed仅从以下echo命令中删除空格和奇异字符:
echo -e "A \xd8\xa8"
所以我尝试了:
echo -e "A \xd8\xa8" | sed -r "s/[^[:print:]]//g"
但不会删除任何内容,
echo -e "A \xd8\xa8" | sed -r "s/[^[:alnum:]]//g"
仅删除空格
echo -e "A \xd8\xa8" | sed -r "s/[^[:alpha:]]//g"
(结果相同),
echo -e "A \xd8\xa8" | sed -r "s/[^[:ascii:]]//g"
返回错误(无效的字符类名称),并且
echo -e "A \xd8\xa8" | sed -r "s/[^\w ]//g"
删除所有内容...
预期结果:“ A”
有什么想法吗?
谢谢!
答案 0 :(得分:2)
如果您想sed
不考虑,例如阿拉伯字符为字母(必须是字母),因此您需要设置一个不考虑它们的语言环境。
“ C”语言环境仅考虑基本字符集,即仅[A-Za-z]
为字母。我假设您要删除的是该范围内不是字符的所有内容(您的问题对您真正想要的是模糊的):
echo -e "A \xd8\xa8" | LC_CTYPE=C sed -r "s/[^[:alpha:]]//g" | hexdump -C
输出:
00000000 41 0a
00000002
答案 1 :(得分:2)
原始文本:
$ echo -e 'A \xd8\xa8' | od -c
0000000 A 330 250 \n
0000005
删除非ASCII字符:
$ echo -e 'A \xd8\xa8' | sed 's/[^\x00-\x7F]//g' | od -c
0000000 A \n
0000003
删除空格:
$ echo -e 'A \xd8\xa8' | sed 's/[[:space:]]//g' | od -c
0000000 A 330 250 \n
0000004
删除非ASCII字符和空格:
$ echo -e 'A \xd8\xa8' | sed 's/[^\x00-\x7F]//g; s/[[:space:]]//g' | od -c
0000000 A \n
0000002
$ echo -e 'A \xd8\xa8' | sed -E 's/[^\x00-\x7F]|[[:space:]]//g' | od -c
0000000 A \n
0000002
答案 2 :(得分:-1)
尝试一下:
[[1]]
[1] "chairman of the board"
[[2]]
[1] "chief executive officer"
[[3]]
[1] "president"
一种替代方法是打印所有ASCII范围(但空格字符和控制字符):
$ echo -e "A \xd8\xa8 ña ñe ño áÄãç " | sed -r "s/[^a-zA-Z0-9]//g"
Aaeo