Как создать сценарий, который принимает строку и преобразует ее в другую управляемую строку? - PullRequest
0 голосов
/ 23 марта 2019

Мое намерение состоит в том, чтобы захватить значения строки, которую я печатаю, и эти значения должны быть сдвинуты на другие буквы. По сути, это была бы фальшивая программа перевода или собственный скрипт генерации шифров. Пример функции:

Я бы набрал предложение:

Кто ты?

и вывод будет смещен, скажем, на 1, например, на следующий согласный или гласный. Сценарий также должен знать, как пропустить гласные или согласные, когда это необходимо, и ради аргумента у всегда будет считаться гласным. Таким образом, результат будет:

Xju eso auy?

Это то, что я хотел попробовать для творческого писательского проекта как средства для создания другого языка. В идеале переменная сдвига также может быть входом для работы, чтобы найти лучший результат. Возможно даже переменные сдвиги для гласных и согласных одновременно?

1 Ответ

1 голос
/ 24 марта 2019

Если вы действительно делаете это для творческого писательского проекта, то я утверждаю, что погружение в программирование не является оправданным. Ни одно из описанных вами входных преобразований не требует от программы решений . То есть; После выбора кодировки входящие письма будут прочно связаны с исходящими письмами. Это значительно расширяет ваши возможности для достижения этой цели и значительно упрощает сложность задачи.

Поскольку вы пометили Терминал , вот пара команд, которые вы можете использовать в действии:

echo "Who are you?" | perl -pe 'tr/N-ZA-Mn-za-m/A-Za-z/'

выходы: Jub ner lbh?
Это знаменитая Rot13 «кодировка» (все, что она делает, это заменяет букву, которая на 13 позже в алфавите). Это особенно удобно, так как 13 - это половина от 26 алфавита, поэтому добавление некоторого «закодированного» текста вернет вам исходный текст:

echo "Jub ner lbh?" | perl -pe 'tr/N-ZA-Mn-za-m/A-Za-z/'

выходы: Who are you?
echo просто отправляет текст на экран или другие команды. Здесь мы echo наш текст "How are you?" в канал |, чтобы передать его следующей команде perl, которая является очень мощной и гибкой программой для работы с текстом и создания отчетов. Остальная часть строки - просто инструкция для perl о том, как закрутить 13 букв позже в алфавите.

Быстрая заметка; обычно нажатие клавиши return запускает команду в терминале. Вы можете поставить обратную косую черту \ в конце строки и нажать клавишу возврата, тогда она позволит вам продолжать печатать на следующей строке, но обрабатывать все это как одну команду. Удобно для выравнивания вещей.

echo "How are you?" | tr \
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' \
'DFVBTXEUWZOSHCJMAQYRINKLPGdfvbtxeuwzoshcjmaqyrinklpg'

выходы: Ujk dqt pji?
Есть другая команда, tr. Этот пример демонстрирует произвольную замену - в данном случае случайную. Он просматривает этот первый длинный набор букв и заменяет вместо него букву во втором длинном наборе, который находится в соответствующей позиции . Поскольку этот пример замещения является случайным, вы можете использовать этот вид сопоставления для создания головоломок «Криптограмма».

Самое замечательное в команде tr заключается в том, что вы можете указать ей использовать любое «отображение» ввода-вывода, которое вы захотите. Конечно, это немного вручную, но эй - программирование не требуется!

Вот карта для достижения требуемого сдвига примера "согласных и гласных":

echo "Who are you?" | tr \
  'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' \
  'ECDFIGHJOKLMNPUQRSTVYWXZABecdfighjoklmnpuqrstvywxzab'

Выводы: Xju esi auy? Не делать это вручную имеет свои преимущества - вы пропустили там гласную.

Так что, если вам нужно быстро попробовать разные сопоставления, подумайте о том, чтобы узнать немного больше о perl (или проще: sed. Или более сложно: awk. Или или или…). Если вместо этого вы не возражаете против тщательного построения команд, просто выровняв каждую входящую букву с желаемой выходной буквой, я думаю, что tr будет хорошо работать.

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