trを使用して、右引用符をアポストロフィに変換しようとしています 。
tr "`echo -e '\xE2\x80\x99'`" "`echo -e '\x27'`" < a > b
aと呼ばれるUTF-8でエンコードされたファイルが与えられます この例が含まれています:
We're not a different species
“All alone?” Jeth mentioned.
OSXはBSDtrを使用します 素晴らしい結果が得られます:
We're not a different species
“All alone?” Jeth mentioned.
UbuntuはGNUtrを使用します そして、この厄介な結果を生み出します:
We'''re not a different species
''<9C>All alone?''<9D> Jeth mentioned.
Ubuntuでこの変換を行うにはどうすればよいですか?
承認された回答:
sedなどの他のツールを試すことができます :
$ sed "s/’/'/g" <a
We're not a different species
“All alone?” Jeth mentioned.
または、単純な翻訳を行っているため、yを使用します sedのコマンド :
$ sed "y/’/'/" <a
We're not a different species
“All alone?” Jeth mentioned.
GNU tr おそらく次の理由で機能しません:
現在、
trシングルバイト文字のみを完全にサポートします。
最終的にはマルチバイト文字をサポートします。その場合、-Cオプションを指定すると、文字のセットを補完しますが、-c値のセットを補完します。この区別は、
一部の値が文字ではない場合にのみ重要であり、
入力にエンコードエラーが含まれている場合に、マルチバイトエンコーディングを使用するロケールでのみ可能です。
そして’ マルチバイト文字です:
$ echo -n \' | wc -c
1
$ echo -n ’ | wc -c
3