我在互联网上阅读了许多关于使用“ tr”命令的教程。 但是,我不能理解如何使用 shell 脚本加密电子邮件地址,使用 rot13改变字符。有人能给出一个链接或例子吗?
不确定你到底想怎样使用它,但是这里有一个基本的例子可以帮助你开始:
echo 'fooman@example.com' | tr 'A-Za-z' 'N-ZA-Mn-za-m'
为了简单起见,您可以在 .bashrc文件中使用 tr命令的别名,如下所示:
.bashrc
tr
alias rot13="tr 'A-Za-z' 'N-ZA-Mn-za-m'"
现在你可以打电话:
echo 'fooman@example.com' | rot13
Ruby (1.9 +)
$ ruby -ne 'print $_.tr( "A-Za-z", "N-ZA-Mn-za-m") ' file
巨蟒
$ echo "test" | python -c 'import sys; print sys.stdin.read().encode("rot13")'
对于 tr来说,这确实是一项完美的任务。这应该可以达到你想要的效果:
tr 'A-Za-z' 'N-ZA-Mn-za-m'
第一个集合中的每个字符将被第二个集合中的相应字符替换。例如。A 被 N 代替,B 被 O 代替,等等。小写字母也一样。所有其他字符将不变地传递。
请注意缺少 [和 ],而这正是您通常所期望的。这是因为 tr从字面上看待方括号,而不是作为范围表达式。因此,例如,tr -d '[A-Z]'将删除大写字母 还有方括号。如果要保留括号,请使用 tr -d 'A-Z':
[
]
tr -d '[A-Z]'
tr -d 'A-Z'
$ echo "foo BAR [baz]" | tr -d '[A-Z]' foo baz $ echo "foo BAR [baz]" | tr -d 'A-Z' foo [baz]
对于字符类也是一样,例如 tr -d '[[:lower:]]'可能是一个错误,应该是 tr -d '[:lower:]'。
tr -d '[[:lower:]]'
tr -d '[:lower:]'
然而,在像这样的幸运情况下,你可以不管怎样包括括括号!例如,tr "[a-z]" "[A-Z]"意外地工作了,因为第一组中的方括号被第二组中相同的方括号所替换,但实际上这是一个坏习惯。使用 tr "a-z" "A-Z"代替。
tr "[a-z]" "[A-Z]"
tr "a-z" "A-Z"
同时做 ROT13(字母)和 ROT5(数字) :
tr 'A-Za-z0-9' 'N-ZA-Mn-za-m5-90-4'
用途:
echo test | tr 'A-Za-z0-9' 'N-ZA-Mn-za-m5-90-4'
你的 ~/.bashrc的别名定义,以防你经常需要它:
~/.bashrc
alias rot="tr 'A-Za-z0-9' 'N-ZA-Mn-za-m5-90-4'"
(准确地说是 rot135或 rot18)
# 互惠转型
# rot13 tr 'A-Za-z' 'N-ZA-Mn-za-m' <<< 'user@domain.com' # rot13.5 (rot18) tr 'A-Za-z0-9' 'N-ZA-Mn-za-m5-90-4' <<< 'user123@domain.com' # rot47 tr '\!-~' 'P-~\!-O' <<< 'user123@domain.com' # rot13 -- SED anyone echo 'user@domain.com' | sed y/NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/
贝壳脚本
#!/bin/bash # Purpose: Rotate 13 characters (a reciprocal transformation) # ./rot13.sh 'A String to look Ciphered' tr 'A-Za-z' 'N-ZA-Mn-za-m' <<< "$1" exit $?
#!/bin/bash echo 'rot13@rot.com' | tr 'A-Za-z' 'N-ZA-Mn-za-m' echo 'rot13@rot.com' | rot13
sudo chmod +x file_name
./file_name example: ./try.sh