Итак, благодаря @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..."