使用 tr 将非字母字符替换为“-”是在字符串末尾添加一个额外的字符

Using tr to replace non-alpha characters with '-' is adding an extra character to end of string

我有以下字符串hello/world 我想用 - 替换 / 以获得 hello-world

我尝试了以下方法:http://rextester.com/NMIOL63413

$ echo hello/world | tr -c '[:alnum:]' '-'
$ hello-world-

为什么最后多了一个-,我该如何去掉它?

很明显,echo 在每个字符串的末尾打印了一个 \n。因为使用 -c,您要替换 不是 [:alnum:] 部分的字符。由于换行符也不是有效字母数字字符的一部分,因此它也会被替换。

在您不确定哪个 "magical" 字符存在或被替换的情况下,请执行 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:]' '-'