Добре, тому завдяки @Prvt_Yadv я зміг зрозуміти крапки. Ось перша відповідь на запитання:
У чому магія за другою tr
командою?
13 точок просто відображаються на перші 13 літер з другого набору. Так
tr .............A-Z A-ZA-Z
буде виробляти наступні набори:
SET1 -> .............ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ
Якщо ваш вхід не містить крапки, ви можете відкинути початкову послідовність, оскільки ви не будете використовувати цю підстановку. Тоді набори стануть:
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ
Але оскільки перший набір вже містить усі 26 літер, а set2 має повторюваний проміжний лист, вони також відкидаються, нарешті
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLM
Яка заміна rot13 і ідентична першій команді (за винятком випадків, коли тут не стосуються нижчих випадків). Таку ж логіку можна застосувати і до назви питання:
tr ...A-Z A-ZA-Z <<< “JVPQBOV”
випускає набори:
SET1 -> ...ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ
Відкидаючи початкову послідовність і останні повторювані букви, вони стають:
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> DEFGHIJKLMNOPQRSTUVXWYZABC
Яка заміна rot3.
Тепер для другого питання:
Як змусити другу команду працювати як для нижнього, так і для верхнього регістру, як і перша команда?
Щоб він працював, ви покладете потрібну кількість крапок на початку, співставляючи свою гниль та 26 точок між верхньою та нижньою послідовністю, саме так:
tr ........A-Z..........................a-z A-ZA-Za-za-z
Це успішно створило б нечутливу гниль8. Щоб візуалізувати, чому це працює, давайте подивимось набори:
SET1 -> ........ABCDEFGHIJKLMNOPQRSTUVXWYZ..........................abcdefghijklmnopqrstuvxwyz
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyzabcdefghijklmnopqrstuvxwyz
Виключаючи зіставлення крапок і прошивання літер:
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyz
SET2 -> IJKLMNOPQRSTUVXWYZABCDEFGHijklmnopqrstuvxwyzabcdefgh
Тепер він працює як для верхнього, так і нижнього регістру :)
Ще один спосіб зробити так, щоб використовувати дві tr
команди так:
tr .............A-Z A-ZA-Z <<< "ABJ V hqrefgnaq" | tr .............a-z a-za-z
Застереження щодо використання підстановки крапок дав @iruvar: ця команда не буде працювати так, як очікувалося, коли в рядок введення є точки. Це відбувається тому, що точки відображаються на інші літери, і під час заміни tr
змінить вхідну крапку на останню відображену букву. Але ви можете використовувати будь-який інший символ, крім крапок. Отже, якщо використання точок у вашій tr
команді є проблемою, ви можете використовувати @
, наприклад, Це буде так само добре:
tr @@@@@@@@@@@@@A-Z A-ZA-Z <<< "GUNAX LBH NYY..."