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은 단일 바이트 문자만 완전히 지원합니다"라고 표시됩니다.

관련 정보