我尝试根据它所说的命令来理解命令-c
中的选项的作用:tr
man tr
-c, -C, --complement 使用 SET1 的补码
但我无法理解医生的意思“补充”所以我做了下面的例子来理解它:
我创建了以下文件,名为trance.txt
:
ILOVE YOU
I HATE YOU
i WANNA EAT APPLE PIE
我跑:tr -C A-Za-z "\n" < trance.txt
这给出了输出:
ILOVE
YOU
I
HATE
YOU
i
WANNA
EAT
APPLE
PIE
但我仍然不明白-c
选项的实际作用。你能给我解释一下吗?
答案1
它用它的补集替换集合A-Za-z
,IE当前字符集中的所有字符,减去指定的字符。引用POSIX, 在缺少...之下-d
:
如果-C指定了选项,则指定的字符的补集字符串1(当前字符集中所有字符的集合,由当前设置定义LC_CTYPE,除了那些实际指定的字符串1操作数)应按升序排列顺序放置在数组中,如当前设置所定义LC_COLLATE。
如果-C指定了选项,由指定的值的补集字符串1应按二进制值升序放置在数组中。
所以你的命令正在替换所有字符不是AZ 或 az 带换行符。
因为tr
使用一对一的字符映射表进行替换,事情并不那么简单;-c
和-C
不仅仅是“不在”选项,它们按照选项指定的顺序构建不在给定集合中的所有字符的集合。仅当目标集具有多个字符时,这一点才有意义。