我很困惑关于方式-s
,-t
以及-c
选择在工作TR命令。当我做
echo I am a good boy | tr good bad
Run Code Online (Sandbox Code Playgroud)
我得到输出:
I am a bddd bdy
Run Code Online (Sandbox Code Playgroud)
这是完全可以理解的,因为o
在good
. 代替 的最后一个可能的变化o
是d
,因此是输出。
现在当我做
echo I am a good boy | tr -s good bad
Run Code Online (Sandbox Code Playgroud)
输出是
I am a bd bdy
Run Code Online (Sandbox Code Playgroud)
该-s
选项应该将集合 1 中每个字符的每个重复出现压缩为单个出现,然后将集合 1 中的每个字符更改为集合 2 中位于相同位置的相应字符。
所以应该是
I am a bad bay.
Run Code Online (Sandbox Code Playgroud)
为什么要改变?
此外,当我做
echo I am a good boy | tr -c good bad
Run Code Online (Sandbox Code Playgroud)
我得到 dddddddgoodddodd
参考这个例子,该-c
选项如何工作tr
?
最后:如何将自己从一个好男孩变成一个坏男孩...... :) :P 也就是说,
echo I am a good boy | tr <something>
给我的输出为:I am a bad boy
。
ltn*_*100 14
-s
开关:挤压(去除重复字符)Run Code Online (Sandbox Code Playgroud)echo i am a good boy | tr -s good bad
输出:
i am a bd bdy
在幕后发生的两件事使这一切发生。首先,如果第二个参数tr
比第一个参数短,则重复第二个参数中的最后一个字符,使其与第一个参数长度相同。所以等效的命令是:
echo i am a good boy | tr -s good badd
Run Code Online (Sandbox Code Playgroud)
发生的另一件事是,当第一个参数中的字符重复时,它们会覆盖之前出现的任何字符(我指的是 中的两个oo
s good
)。这使得命令现在等效于:
echo i am a good boy | tr -s god bdd
Run Code Online (Sandbox Code Playgroud)
(第二o
至d
更换覆盖以前的o
以a
置换,使其成为冗余)
如果没有-s
开关,输出将是
i am a bddd bdy
Run Code Online (Sandbox Code Playgroud)
使用-s
开关tr
“挤压”最后一个参数中列出的任何重复字符,留下最终输出:
i am a bd bdy
Run Code Online (Sandbox Code Playgroud)
-c
开关:互补该-c
开关用于匹配第一个参数的补码(即所有未在 arg 1 中列出的字符)。结果,arg 1 将包含许多字母 (256-3)。现在,arg 2 发生了与前一种情况相同的事情:重复 Arg 2 的最后一个字符以匹配长度或 Arg 1。所以原始语句:
echo i am a good boy | tr -c good bad
Run Code Online (Sandbox Code Playgroud)
相当于:
echo i am a good boy | tr abcefhijklmnp... baddddddddddd...
Run Code Online (Sandbox Code Playgroud)
(注意失踪g
,o
并d
在第一盘,也注意到,d
将取代在第二组中的每个其他角色-包括空格字符)
这就是为什么i am a good boy
变成dddddddgoodddodd
更多信息在这里:http : //www.linuxjournal.com/article/2563
归档时间: |
|
查看次数: |
20537 次 |
最近记录: |