代码之家  ›  专栏  ›  技术社区  ›  Krimson

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

  •  1
  • Krimson  · 技术社区  · 6 年前

    我有下面的绳子 hello/world 我想替换 / - 得到 hello-world

    http://rextester.com/NMIOL63413

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

    为什么有额外的 -

    1 回复  |  直到 6 年前
        1
  •  5
  •   Toby Speight    6 年前

    很明显 echo 打印一个 \n -c ,您正在寻找替换以下字符 [:alnum:] . 由于新行也不是有效的字母数字字符的一部分,因此它也会被替换。

    在这种情况下,如果你不确定哪个“魔法”角色出现或被替换,那么做一个 hexdump 从弦里看。你可以看到 \n个 最后。

    echo hello/world | hexdump -c
    0000000   h   e   l   l   o   /   w   o   r   l   d  \n
    000000c
    

    printf :

    printf '%s' 'hello/world' | tr -c '[:alnum:]' '-'