Как сдвинуть каждую букву строки на заданное количество букв? - PullRequest
10 голосов
/ 22 июня 2011

Как я могу сдвинуть каждую букву строки на указанное количество букв вниз или вверх в bash, не используя жестко закодированный словарь?

Ответы [ 3 ]

16 голосов
/ 22 июня 2011

Вы имеете в виду что-то вроде ROT13:

pax$ echo 'hello there' | tr '[a-z]' '[n-za-m]'
uryyb gurer

pax$ echo 'hello there' | tr '[a-z]' '[n-za-m]' | tr '[a-z]' '[n-za-m]'
hello there

Для более общего решения, когда вы хотите обеспечить произвольное вращение (от 0 до 26), вы можете использовать:

#!/usr/bin/bash

dual=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
phrase='hello there'
rotat=13
newphrase=$(echo $phrase | tr "${dual:0:26}" "${dual:${rotat}:26}")
echo ${newphrase}
7 голосов
/ 22 июня 2011
$ alpha=abcdefghijklmnopqrstuvwxyz
$ rot=3
$ sed "y/${alpha}/${alpha:$rot}${alpha::$rot}/" <<< 'foobar'
irredu
0 голосов
/ 31 мая 2019

Если вы хотите вращать также столицы, вы можете использовать что-то вроде этого:

cat data.txt | tr '[a-z]' '[n-za-m]' | tr '[A-Z]' '[N-ZA-M]'

, где data.txt имеет то, что вы хотите повернуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...