sedとtrの間の文字の置き換え

sedとtrの間の文字の置き換え

このシステムは、現在Raspbian "buster"を実行しているRaspberry Piです。

次の方法を使用してCPU温度を取得できます。

$ vcgencmd measure_temp
temp=53.0'C

以下を使用して'置き換えることができます。°sed

$ vcgencmd measure_temp | sed "s/'/°/"
temp=52.0°C

trしかし、私は「より軽い」代替として見えるものを使用してこれを行うことを好みますsed

私は以下を試しましたtr

$ vcgencmd measure_temp | tr ' °            # nope
$ vcgencmd measure_temp | tr \' \°          # nope
temp=53.0�C 

# Yet, this works:

$ vcgencmd measure_temp | tr \' d
temp=52.0dC
$ 

私は何を見逃していますか?度記号に特別な注意が必要ですか?

ベストアンサー1

度を引用すると機能しますtr

$ vcgencmd measure_temp | tr \' '°'

編集:私はテストしたばかりで、trちょっと変なようです。

$ echo "asdf'" | tr \' '°'
asdf�

$ TEST="asdf'"; echo ${TEST/\'/°}
asdf°

注:上記のシェル文字列操作は、すべてのシェルソルバーで機能するわけではありません。私はそれがbashで動作することを知っています。 @fra-sanは少なくともksh93、mksh、yash、zshで動作すると言いました。だから、もともと思ったより携帯性が良いです。

最後に、上記の@fra-sanさんのコメントに基づいて、現在のCoreutilsドキュメントそれでも、「現在のtrはシングルバイト文字のみを完全にサポートしています」と表示されます。

おすすめ記事