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