首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘-C’和‘-c’在`t‘命令中有什么区别?

‘-C’和‘-c’在`t‘命令中有什么区别?
EN

Unix & Linux用户
提问于 2015-11-09 02:52:44
回答 2查看 2.4K关注 0票数 11

今天,我学习了一些关于tr命令的知识。

但是,我仍然无法理解-c-C之间的区别。

在手册上,它说:

代码语言:javascript
复制
 -C      Complement the set of characters in string1, that is ``-C ab'' includes every character except for `a' and `b'.

 -c      Same as -C but complement the set of values in string1.

我不太明白set of values in string1 of -c选项意味着什么。

我认为它可以将字符串1 "ab"作为一个整体,并将避开单个ab

所以我做了一个实验:

代码语言:javascript
复制
⇒  echo "ab_a_b" | tr -C 'ba' 'c'
abcacbc%                                                                                                                                                                             
⇒  echo "ab_a_b" | tr -c 'ba' 'c'
abcacbc%

事情不符合我的期望!

那么,-C-ctr命令中有什么区别呢?

软件版本: OSX10.10上的BSD 2004

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2015-11-09 02:59:35

“POSIX手册”指出:

  • 如果指定了-C选项,则string1指定的字符(由LC_CTYPE当前设置定义的当前字符集中的所有字符的集合,实际上在string1操作数中指定的字符除外)的补充字符将按升序排序规则顺序放置在数组中,这是由LC_COLLATE当前设置所定义的。
  • 如果指定了-c选项,则string1指定的值的补码将按二进制值按升序放置在数组中。

,并包含以下注释

ISOPOSIX-2:1993标准有一个与-c选项类似的-C选项,但没有提供与POSIX1.2008中指定的-c选项相同的功能。这意味着,能够指定tr -cd\000-\177 (它将删除设置了顶部位的所有字节)的历史实践不会产生任何效果,因为在C语言环境中,具有八进制200到八进制377的字节不是字符。

由此可以看出,-c选项允许您指定表示ASCII字符的数值,而不是使用字符本身。

票数 7
EN

Unix & Linux用户

发布于 2015-11-09 03:11:05

这个问题实际上是关于BSD tr,而不是gnu tr。

BSD tr man:

代码语言:javascript
复制
 -C      Complement the set of characters in string1, that is ``-C ab''
         includes every character except for `a' and `b'.

 -c      Same as -C but complement the set of values in string1.

FreeBSD 8.2                    October 13, 2006

GNU tr man:

代码语言:javascript
复制
   -c, -C, --complement
          use the complement of SET1

OSX内置的工具,我相信是BSD版本。

修正错误,sed/tr

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/241746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档