使用 sed 删除字符

使用 sed 删除字符

Caucasian male lives in Arizona w/ fiancÃÂÃÂÃÂÃÂÃÂ我正在 AIX unix 上工作,并尝试从文件中删除不可打印的字符,当我使用 UTF-8 编码在 Notepad++ 中查看时,数据看起来就像在文件中一样。当我尝试在 unix 中查看文件时,我得到 ^▒▒^▒▒^▒▒^▒▒^▒▒^▒▒ 而不是特殊字符。

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

我尝试了 sed's/[^[:print:]]/ /g' file但它没有删除这些字符。当我运行时,我的区域设置列在下面locale -a

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

我什至尝试过sed -e 's/[^ -~]/ /g' file,但它没有删除字符。

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

我也正在使用ksh.

答案1

如果当前区域设置已使用 UTF-8 作为字符集(并且文件是使用该字符集写入的):

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

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

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

答案2

您可以按如下方式使用该命令tr

tr -cd '[:print:]\t\r\n'

解释:

`[:print:]'
Any character from the `[:space:]' class, and any character that is not in the `[:graph:]' class
\r -- return
\t -- horizontal tab

示例based on Centos 7:tris GNU and UTF-8 encoding

$ echo "fiancÃÂÃÂÃÂÃÂÃÂ" | tr -cd '[:print:]\t\r\n'
fianc

$ echo "get ^▒▒^▒▒^▒▒^▒▒^▒▒^▒▒ " | tr -cd '[:print:]\t\r\n'
get ^^^^^^

echo " Caucasian male lives in Arizona w/ fianc▒^▒▒^▒▒^▒▒^▒▒^▒▒^▒^▒▒^▒▒^▒▒^▒▒^▒▒^▒"  | tr -cd '[:print:]\t\r\n'
 Caucasian male lives in Arizona w/ fianc^^^^^^^^^^^^

相关内容