文本处理 – 用sed 删除字符

参见英文答案 > sed Match character range                                    2个
我正在使用AIX unix并尝试从文件中删除不可打印的字符,当我在记事本中使用UTF-8编码查看时,数据看起来像白人男性生活在亚利桑那州和文件中的fiancÃÂÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂ当我尝试在unix中查看文件时,我得到^▒▒^▒▒^▒▒^▒▒^▒▒^▒▒而不是特殊字符.

我想用空格替换所有这些特殊字符.

我尝试了sed的/ [^ [:print:]] / / g’文件,但它没有删除这些字符.当我运行locale -a时,下面列出了我的语言环境

C
POSIX
en_US.8859-15
en_US.ISO8859-1
en_US

我甚至尝试了sed -e’s / [^ – 〜] / / g’文件,它没有删除字符.

我看到其他stackflow的答案使用了GNU sed的UTF-8语言环境,但这有效,但我没有那个语言环境.

我也在使用ksh.

最佳答案
如果当前语言环境已使用UTF-8作为字符集(并且使用该字符集写入文件):

<file LC_ALL=C sed 's/[^ -~]//g'

或者,在AIX sed中包含控制字符:

<file LC_ALL=C sed "$(printf "s/[^[:print:]\t\r]//g")"

转载注明原文:文本处理 – 用sed 删除字符 - 代码日志