我有以下字符串hello/world
我想将/
替换为-
,以获得hello-world
我尝试了以下操作:http://rextester.com/NMIOL63413
$ echo hello/world | tr -c '[:alnum:]' '-'
$ hello-world-
为什么最后会有一个额外的-
以及如何摆脱呢?
答案 0 :(得分:5)
很明显,echo
在每个字符串的末尾打印一个\n
。由于使用-c
,因此您希望替换[:alnum:]
的不部分的字符。由于换行也不是有效的字母数字字符的一部分,因此也将替换换行。
在不确定哪个“魔术”字符存在或被替换的情况下,请执行hexdump
以查看字符串中的字符。您可能会在末尾看到\n
。
echo hello/world | hexdump -c
0000000 h e l l o / w o r l d \n
000000c
因此,为避免这种换行符和其他shell元字符实例与替换字符串混淆的情况,请始终使用printf
:
printf '%s' 'hello/world' | tr -c '[:alnum:]' '-'