用 bash 改变单个字母的位置

2 command-line text-processing

如果我有一个名为的文件text.txt 并且它包含一行文本,ijbiaubiu 是否可以将每个字母在字母表中向前或向后移动一个空格以手动对其进行加密,我认为这将是 ROT 密码?

它是如何完成的?

我已经尝试过sedperl -pi -e但我不知道如何在应用命令之前读取文件的内容,而这些实用程序从来没有成功过。

澄清一下,我不是在寻求加密文件的帮助。相反,在学习如何使用 CLI 手动转换文件中的字母字符的帮助下。

Rav*_*ina 10

您可以使用tr命令来完成。搜索“ROT cypher Bash”将我带到caesar-cipher.sh

  • 请注意,命令区分大小写。

凯撒密码编码:

$ echo "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG" | tr '[A-Z]' '[X-ZA-W]'
QEB NRFZH YOLTK CLU GRJMP LSBO QEB IXWV ALD
Run Code Online (Sandbox Code Playgroud)

凯撒密码解码:

$ echo "QEB NRFZH YOLTK CLU GRJMP LSBO QEB IXWV ALD" | tr '[X-ZA-W]' '[A-Z]'
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
Run Code Online (Sandbox Code Playgroud)

它也可以调整为 ROT13:

$ echo "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG" | tr '[A-Z]' '[N-ZA-M]'
GUR DHVPX OEBJA SBK WHZCF BIRE GUR YNML QBT

$ echo "GUR DHVPX OEBJA SBK WHZCF BIRE GUR YNML QBT" | tr '[N-ZA-M]' '[A-Z]'
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
Run Code Online (Sandbox Code Playgroud)

在您的情况下,它将是:

tr '[A-Z]' '[X-ZA-W]' < file
Run Code Online (Sandbox Code Playgroud)

也从另一个来源解码(反转模式的顺序进行编码):

ROT-3 = tr 'd-za-cD-ZA-C' 'a-zA-Z'
ROT-4 = tr 'e-za-dE-ZA-D' 'a-zA-Z'
ROT-5 = tr 'f-za-eF-ZA-E' 'a-zA-Z'
ROT-6 = tr 'g-za-fG-ZA-F' 'a-zA-Z'
ROT-7 = tr 'h-za-gH-ZA-G' 'a-zA-Z'
ROT-8 = tr 'i-za-hI-ZA-H' 'a-zA-Z'
ROT-9 = tr 'j-za-iJ-ZA-I' 'a-zA-Z'
ROT-10 = tr 'k-za-jK-ZA-J' 'a-zA-Z'
ROT-11 = tr 'l-za-kL-ZA-K' 'a-zA-Z'
ROT-12 = tr 'm-za-lM-ZA-L' 'a-zA-Z'
ROT-13 = tr 'n-za-mN-ZA-M' 'a-zA-Z'
ROT-14 = tr 'o-za-nO-ZA-N' 'a-zA-Z'
ROT-15 = tr 'p-za-oP-ZA-O' 'a-zA-Z'
ROT-16 = tr 'q-za-pQ-ZA-P' 'a-zA-Z'
ROT-17 = tr 'r-za-qR-ZA-Q' 'a-zA-Z'
ROT-18 = tr 's-za-rS-ZA-R' 'a-zA-Z'
ROT-19 = tr 't-za-sT-ZA-S' 'a-zA-Z'
ROT-20 = tr 'u-za-tU-ZA-T' 'a-zA-Z'
ROT-21 = tr 'v-za-uV-ZA-U' 'a-zA-Z'
ROT-22 = tr 'w-za-vW-ZA-V' 'a-zA-Z'
ROT-23 = tr 'x-za-wX-ZA-W' 'a-zA-Z'
ROT-24 = tr 'y-za-xY-ZA-X' 'a-zA-Z'
ROT-25 = tr 'z-za-yZ-ZA-Y' 'a-zA-Z'
Run Code Online (Sandbox Code Playgroud)