BadCats
@BadCats

Как в данном случае работает утилита tr?

Есть вот такой пример с HTB:
echo https://www.hackthebox.eu/ | tr 'A-Za-z' 'N-ZA-Mn-za-m'
- тут интересно то, что в set1 и set2 - указаны по несколько наборов для замены, но пока читал про tr в интернете - не нашел похожего примера - попробовал поиграться с утилитой tr, например вот так: echo 'example123' | tr 'a-z1-9' '1-9A-Z' - хотел заменить все буквы на цифры, а оставшиеся цифры в конце строки (123) - на буквы в верхнем регистре. Получил такой вывод:
5O1DGC5RST
- попробовал просто заменить буквы на цифры: echo 'example123' | tr 'a-z' '1-9' - Вывод:
5919995123
- вот, что остается непонятно -как работает такое указание наборов - т.е. сначала диапазон a-z - меняется на диапазон 1-9 из второго набора, а потом 1-9 на A-Z (но судя по выводу - это не так - т.к. иначе -
5O1DGC5RST
-были бы только буквы ) или же такая замена: первый символ строки (нечетные) - меняется по принципу: 'a-z' - '1-9' , а четные символы - по принципу - '1-9' - 'A-Z' , но опять же, почему тогда в строке
5O1DGC5RST
- идут три буквы подряд 'DGC' и не важно как считать с 0 или 1. Еще, про ключ -t - написано что если его не использовать (как у меня в примере и не усекать НАБОР1 - который длине НАБОР2) - то:
В случае если НАБОР1 больше НАБОР2 - последний символ во втором наборе заменяет все оставшиеся символы первого набора.
, но в примере echo 'example123' | tr 'a-z1-9' '1-9A-Z' - они равны - т.к. в обоих множествах указанно по два диапазона, суммарная мощность которых - так же равна (т.е. 'все буквы' + 'все цифры'='все цифры' + 'все буквы').
Собственно два вопроса:
1. Как это все работает?
2. как же все таки для строки example123 - заменить example на цифры, а 123 - на заглавные буквы с помощью утилиты tr - ОДНОЙ командой - не прибегая к pipeline ( | ) и перенаправлению потоков ( > ) (И возможно ли это)?
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
tr просто заменяет из первого вторым по порядку.

echo 'example123' | tr 'a-z1-9' '1-9A-Z'
в данном случае раскрываем оба диапазона и получается abcdefghij... во втором будет 123456789ABC...

следовательно a заменится на 1, а j на A
а 0 в вашем диапазоне вообще не указан.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BorLaze
@BorLaze
Java developer
Собственно два вопроса:
1. Как это все работает?
2. как же все таки для строки example123 - заменить example на цифры, а 123 - на заглавные буквы с помощью утилиты tr - ОДНОЙ командой - не прибегая к pipeline ( | ) и перенаправлению потоков ( > ) (И возможно ли это)?


Выпиши в две строки свои сеты:
abcdefghijklmnopqrstuvwxyz123456789
123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ

и ты сразу поймешь и как оно работает, и почему п.2 сделать одной командой нельзя...
"Компьютер делает не то, что вы хотели, а то, что вы ему приказали".

ЗЫ: Тебе правильно ky0 написал - "читайте маны, они рулез!"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы