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-8
GNU 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^^^^^^^^^^^^