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文字は削除されませんでした。

私は動作するGNU sedロケールを使用する他のスタックフローの答えを見ましたが、UTF-8そのロケールはありません。

私もそれを使っています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^^^^^^^^^^^^

関連情報