Text-Processing
使用 sed 刪除字元
我正在使用 AIX unix 並嘗試從文件中刪除不可列印的字元,
Caucasian male lives in Arizona w/ fiancÃÂÃÂÃÂÃÂÃÂ
當我使用 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
,它沒有刪除字元。我看到其他堆棧流答案使用
UTF-8
帶有 GNU sed 的語言環境,這有效,但我沒有那個語言環境。我也在使用
ksh
.
如果目前語言環境已經使用 UTF-8 作為字元集(並且文件是使用該字元集編寫的):
<file LC_ALL=C sed 's/[^ -~]//g'
或者,要在 AIX sed 中包含控製字元:
<file LC_ALL=C sed "$(printf "s/[^[:print:]\t\r]//g")"
您可以使用以下命令
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:
_is 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^^^^^^^^^^^^