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°

请注意:上述 shell 字符串操作可能不适用于所有 shell 解释器。我知道它可以在 bash 中工作,@fra-san 提到它至少可以在 ksh93、mksh、yash、zsh 下工作。所以它比我最初想象的更便携。

最后,根据上面 @fra-san 的评论,当前 Coreutils 文档仍然声明“当前 tr 完全支持仅单字节字符”。

相关内容