bash shell tr​​ -d -c选项组合用法

时间:2016-08-19 06:37:30

标签: bash shell tr

echo $PATH | tr -d -c :

此输出为:

::::

$PATH的值为:

/import/adams/2/z1/bin-pc.i86.linux:/import/adams/2/z1/bin:/usr/local/bin:/usr/bin:/bin

为什么我得到这样的输出;;;;?我无法理解-d -c :. -c选项需要两个集合,但-d只需要一个集合。首先执行哪个选项?这个结果是如何产生的?

感谢。

2 个答案:

答案 0 :(得分:1)

$ p=/import/adams/2/z1/bin-pc.i86.linux:/import/adams/2/z1/bin:/usr/local/bin:/usr/bin:/bin
$ echo "$p" |  tr -d -c :
::::

-d选项告诉tr 删除字符。

-c选项表示使用后面字符集的补充

由于后面的字符集为:,因此删除除 :之外的所有。这就是你看到你看到的输出的原因。

更多例子

在下文中,字符集不仅包括:,还包括/。因此,除:/之外的所有内容都将被删除:

$ echo "$p" |  tr -d -c :/
/////://///:///://:/

在下文中,我们省略-c并指定:的字符集。因此,所有冒号都被删除:

$ echo "$p" |  tr -d :
/import/adams/2/z1/bin-pc.i86.linux/import/adams/2/z1/bin/usr/local/bin/usr/bin/bin

答案 1 :(得分:0)

我无法重现您在输出中得到;而不是:,但是您要求tr -d选择-c中的所有内容{1}} :的实施,所有非:字符。

正如man 1 tr所说:

   -c, -C, --complement
          use the complement of SET1

   -d, --delete
          delete characters in SET1, do not translate