使用 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:]' '-'
我有以下字符串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:]' '-'