Из официального описания легко понять ценность этого инструмента. Linux предлагает большую коллекцию встроенных инструментов. Есть несколько специальных, которые очень полезны для работы с текстом. Мы уже рассмотрели некоторые из них, такие как Vim, Nano, awk, sed и другие инструменты.
Тем, кто работает с текстами на постоянной основе, «tr» обязательно будет очень-очень полезен. Эта статья проиллюстрирует наиболее частое использование слова «tr» с достаточным количеством примеров.
Примечание: в учебнике будет использоваться тонна фиктивных файлов со случайным содержимым. Все случайные строки генерируются Случайный.org.
Место расположения
который тр
Это полный путь к командному инструменту «tr».
Основное использование
Для использования инструмента «tr» вы должны использовать следующую структуру команд.
trСуществуют различные варианты и способы манипулирования текстами с помощью «tr». Сначала давайте посмотрим этот демонстрационный файл.
кошка демо.текст
Все символы в нижнем регистре справа? Преобразуем их в верхний регистр!
кошка демо.txt | tr [: lower:] [: upper:]
Здесь первый параметр «tr» указывает на выполнение перевода для всех строчных символов ввода. Вторая часть говорит преобразовать их в верхний регистр на выходе.
Теперь давайте сделаем наоборот.
кошка demo1.тексткошка demo1.txt | tr [: верхний:] [: нижний:]
Есть еще один способ выполнить ту же задачу. Давай проверим.
кошка демо.txt | tr [a-z] [A-Z]
Теперь, вместо того, чтобы указывать «tr» переводить верхний регистр в нижний или нижний регистр в верхний, мы сказали идентифицировать записи, соответствующие диапазону от «a» до «z», и переводить в их эквивалент из диапазона «A» до «Z».
Этот аналогичный метод также можно использовать для перевода верхнего регистра в нижний регистр.
кошка demo1.txt | tr [A-Z] [a-z]
Игра с числами
Мы видели, как переводить верхний регистр в нижний регистр справа? Пора поиграть с цифрами.
Используя следующую команду, мы можем легко перевести все цифры (0-9) в их эквивалентные символы!
кошка demo_digit.тексткошка demo_digit.txt | tr [0-9] [а-я]
Потрясающие! Как насчет прописных?
кошка demo_digit.txt | tr [0-9] [A-Z]
Просто, но интересно, верно? Мы также можем преобразовывать символы в цифры!
кошка demo_lowercase.тексткошка demo_lowercase.txt | tr [a-z] [0-9]
Ой, похоже, что все сломалось, верно? Ну, мы можем использовать только буквы от 'a' до 'j' для представления однозначных чисел. Если есть какой-либо символ, выходящий за эту границу, «tr» заменит этот символ на ']'.
Удаление персонажей
Как следует из официального описания, «tr» может не только переводить символы. В следующем примере мы рассмотрим, как использовать «tr» для удаления определенных символов.
кошка случайная.текст
Теперь удалим все числа из содержимого.
кошка случайная.txt | tr -d [0-9]
Здесь флаг «-d» указывает «tr» на удаление, а [0-9] обозначает цифры для удаления.
Мы также можем сделать это с персонажами. Следующая команда сохранит все числа, но удалит все символы.
кошка случайная.txt | tr -d [а-я]
Как насчет удаления только одного конкретного символа из файла?
кошка demo_lowercase.тексткошка demo_lowercase.txt | tr -d 'y'
Он удалил все записи 'y' из файла.
Сжатие повторяющихся символов
Бывают случаи, когда символ повторяется последовательно. Если вы столкнулись с такими неприятными проблемами, просто позвольте tr позаботиться об этом! Используя следующую команду, вы можете сжать такие вхождения. По сути, он сохраняет первоначальное вхождение символа и удаляет дополнительные.
Сначала пора проверить, как выглядит демонстрационный файл.
кошка дубликат.текст
Теперь передайте контент в «tr».
кошка дубликат.txt | tr -s [: цифры:]
Здесь параметр «-s» - это индикатор выполнения действия «сжатие».
Разрыв / слияние предложений
Давайте посмотрим демонстрационный файл.
дубликат летучей мыши.текст
Он содержит предложение с пробелами, разделяющими слова, справа? Разобьем слова на новые строки.
кошка дубликат.txt | tr "" "\ n"
Эта команда заменила все пробелы символами новой строки.
Давайте снова объединим разорванное предложение в длинное предложение.
дубликат летучей мыши.тексткошка дубликат.txt | tr "\ n" ""
Перевод символов
Так же, как мы переводили символы раньше, на этот раз мы сделаем то же самое, но только с одним символом.
кошка демо.текст
В этом файле давайте заменим все символы новой строки на точку с запятой.
кошка демо.txt | tr "\ n" ";"
Пришлось обернуть вокруг «эхо». В противном случае будет создан какой-то вывод, потому что последний символ новой строки также будет переведен в точку с запятой.
Есть другой способ смены персонажей. Однако это сложнее контролировать.
кошка duplicate1.тексткошка duplicate1.txt | tr -c 'd' z '
кошка duplicate1.txt | tr -c 'd' z '
Ух ты! Давайте обернем его вокруг «эхо», чтобы лучше понять вывод.
echo $ (cat duplicate1.txt | tr -c 'd' 'z')
Что здесь случилось? Используя флаг «-c», «tr» оставит неизменным только целевой символ. В случае несовпадения все остальные символы будут преобразованы. Здесь любой символ, кроме "b", был заменен на "z".
Перевод строк
«Tr» также может работать со строками. Выполним замену строки.
кошка duplicate1.тексткошка duplicate1.txt | tr "дубликат" "not_duplicate"
Моя заменяемая строка короче заменяемой строки, поэтому она не подходит.
Наборы символов
К настоящему времени вы заметили, что существует ряд наборов символов, поддерживаемых «tr». Хотя некоторые из них использовались в приведенных выше примерах, другие наборы символов также весьма полезны. Вот список всех поддерживаемых списков символов.
Наборы символов POSIX
- [: digit:]: цифры 0–9
- [: alpha:]: алфавиты от a до z и от A до Z.
- [: alnum:]: буквенно-цифровые символы
- [: punct:]: символы пунктуации
- [: пробел:]: любой символ пробела, например пробел, табуляция, FF, CR, NL, FF и т. д.
- [: upper:]: все буквы верхнего регистра
- [: lower:]: все строчные буквы
- [: cntrl:]: все управляющие символы (NL, CR, EXT, STX, ACK, SO, DC1, DC2, NAK, ETB, ESC, IS1, IS2, DEL и т. д.)
Дополнительные наборы символов
- [A – Z]: все буквы в верхнем регистре
- [a-z]: все строчные буквы
- [0-9]: все цифры
Последние мысли
Есть множество способов, которыми все эти функции tr могут принести пользу пользователям. Я всегда рекомендую проверять все доступные параметры и подробные руководства по любому инструменту Linux на их страницах man, info и help, поскольку они могут предложить более ценные знания.
tr --helpчеловек тр
info tr
Наслаждаться!