我想用来tr做一些 rot13 转换。我可以很好地理解这个命令:
tr A-Za-z N-ZA-Mn-za-m <<< "URYC ZR CYRNFR"
Run Code Online (Sandbox Code Playgroud)
哪个输出是HELP ME PLEASE,但我不知道这个其他命令如何产生相同的 rot13 转换:
tr .............A-Z A-ZA-Z <<< "URYC ZR CYRNFR"
Run Code Online (Sandbox Code Playgroud)
所以我有两个问题:
tr命令背后的魔法是什么?Prv*_*dav 17
它的工作原理如下:
SET1-> .............ABCDEFGHIJKLMNOPQRSTUVWXYZ
SET2-> ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLM
Run Code Online (Sandbox Code Playgroud)
所以tr会翻译SET1成SET2.
这相当于第一个,因为它也按13单位移动,因为有 13 个点。
要包含小写字母,您必须SET1使用类似的偏移量排列它们,即:
.............ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklm
Run Code Online (Sandbox Code Playgroud)
那是Z和之间的 26 个点a,跨越大写字母和小写字母的一半。所以tr命令本身将是:
tr .............A-Z..........................a-z A-ZA-Za-za-z
Run Code Online (Sandbox Code Playgroud)
use*_*803 14
正如@Prvt_Yadv 在他们的回答中所说,它有效,因为有 13 个点。
套装是
First set: .............ABCDEFGHIJKLMNOPQRSTUVWXYZ
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
Run Code Online (Sandbox Code Playgroud)
点不是特殊字符,因此如果您的输入中有一个点,它也会被翻译。在tr我所拥有的版本中,它是第二组中最后一个对应的字符,在本例中为M:
$ echo URYC ZR CYRNFR. | tr .............A-Z A-ZA-Z
HELP ME PLEASEM
Run Code Online (Sandbox Code Playgroud)
(我可以想象不同版本的tr可能会使用第 2 组中的第一个匹配字符,这将给出A.)
要回答你的第二个问题,你需要第一组中的另外 13 个点来“用完”组 2 中剩余的大写字母:
First set: .............ABCDEFGHIJKLMNOPQRSTUVWXYZ.............
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
Run Code Online (Sandbox Code Playgroud)
然后你可以重复这个模式:
First set: .............ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................abcdefghijklmnopqrstuvwxyz
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
Run Code Online (Sandbox Code Playgroud)
这给了我们:
tr .............A-Z..........................a-z A-ZA-Za-za-z
Run Code Online (Sandbox Code Playgroud)
所以:
$ echo Uryc zr cyrnfr | tr .............A-Z..........................a-z A-ZA-Za-za-z
Help me please
Run Code Online (Sandbox Code Playgroud)
就我个人而言,我认为在您的问题中的第一种方法更简单!
第一种方式也不会转换输入中的任何其他字符。例如,比较:
$ echo Uryc zr cyrnfr. | tr .............A-Z..........................a-z A-ZA-Za-za-z
Help me pleasem
Run Code Online (Sandbox Code Playgroud)
和
$ echo Uryc zr cyrnfr. | tr A-Za-z N-ZA-Mn-za-m
Help me please.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3135 次 |
| 最近记录: |