"tr" - это очень полезная команда UNIX. Она используется для преобразования строк или удаления символов из строки. С помощью этой команды можно выполнять различные виды преобразований, например, поиск и замену текста, преобразование строки из верхнего регистра в нижний или наоборот, удаление повторяющихся символов из строки и т.д. Команда может быть использована и для некоторых сложных преобразований. Различные варианты использования команды "tr" показаны в этом уроке.
Синтаксис
1 | tr [option] stringValue1 [stringValue2] |
Опция и stringValue2 являются необязательными для команды `tr`. Вы можете использовать опции -c, -s и -d с командой `tr` для выполнения различных типов задач.
Изменение регистра
Вы можете очень легко изменить регистр строки с помощью команды tr. Для определения верхнего регистра вы можете использовать [:upper:] или [A-Z], а для определения нижнего регистра - [:lower:] или [a-z].
Команда `tr` может быть использована следующим образом для преобразования любой строки из верхнего регистра в нижний.
1 | tr [:upper:] [:lower:] |
Команду `tr` можно использовать и для преобразования любой строки из нижнего регистра в верхний.
1 | tr a-z A-Z |
Выполните следующую команду, чтобы преобразовать все строчные буквы строки 'string' в заглавные.
1 | echo string | tr [:lower:] [:upper:] |
После выполнения приведенной выше команды появится следующий результат. Строка 'string' преобразовалась в строку 'STRING'.
1 2 | # echo string | tr [:lower:] [:upper:]<code> STRING |
Вы можете применить команду `tr` для преобразования содержимого любого текстового файла из верхнего в нижний или из нижнего в верхний. Предположим, у вас есть текстовый файл items.txt со следующим содержимым.
1 2 3 4 5 | Apple Apricot Avocado Pineapple BANANA |
Выполните следующие команды из терминала для отображения содержимого файла items.txt и вывода команды `tr` после преобразования содержимого этого файла из нижнего регистра в верхний. Команда `tr` не изменяет исходное содержимое файла.
1 2 | cat items.txt tr a-z A-Z < items.txt |
Вывод
1 2 3 4 5 6 7 8 9 10 11 12 | :~# cat items.txt Apple Apricot Avocado Pineapple BANANA :~# tr a-z A-Z < items.txt APPLE APRICOT AVOCADO PINEAPPLE BANANA |
Вы можете выполнить следующую команду, чтобы сохранить вывод команды `tr` в другой файл с именем 'output.txt'.
1 2 | tr [:upper:] [:lower:] < items.txt > output.txt cat output.txt |
Перенос строк
Команда `tr` может быть использована для поиска и замены любого определенного символа в любом тексте. Следующая команда используется для преобразования каждого пробела в тексте "Welcome to Linux" в новую строку (\n).
1 | echo "Welcome To Linux" | tr [:space:] '\n' |
Вывод:
После выполнения приведенной выше команды появится следующий результат. Каждое слово текста напечатано в каждой строке.
1 2 3 4 | :~# echo "Welcome To Linux" | tr [:space:] '\n' Welcome To Linux |
Использование опции -c (-complement)
Команду `tr` можно использовать с опцией -c для замены вторым символом тех символов, которые не совпадают со значением первого символа. В следующем примере команда `tr` используется для поиска тех символов в строке 'bash', которые не совпадают с символом 'b', и замены их на 'a'. На выходе получится 'baaaa'. Здесь преобразуются четыре символа. Это ,'a','s','h' и '\n'.
1 | echo "bash" | tr -c 'b' 'a' |
После выполнения вышеуказанной команды появится следующий результат.
1 2 | :~# echo "bash" | tr -c 'b' 'a' baaaa |
Использование опции -s
Команда `tr` использует опцию -s (-squeeze-repeats) для поиска и замены любой строки в тексте. В следующем примере пробел (' ') заменяется на табуляцию ('\t').
1 | echo "Программирование BASH" | tr -s ' ' '\t' |
Вывод:
1 2 | :~# echo "Программирование BASH" | tr -s ' ' '\t' Программирование BASH |
После выполнения приведенной выше команды появится следующий результат. Здесь пробел был заменен пробелом табуляции.
Вы можете использовать опции -c и -s вместе с командой `tr`. В следующем примере в качестве первого строкового значения использован диапазон строчных букв. Для опции -c команда `tr` будет искать и заменять символы, не являющиеся строчными буквами, на новую строку ('\n') в файле items.txt и сохранять результат команды в файле output.txt.
1 | tr -cs [a-z] "\n" < items.txt > output.txt |
Использование опции -d (-delete)
Опция -d используется с командой `tr` для поиска и удаления любого символа или строки из текста. В следующем примере команда `tr` выполнит поиск 'P', 'y' и 't' в строке "Python - это язык программирования" и удалит эти символы.
1 | echo "Python - это язык программирования" | tr -d 'Pyt' |
Вывод:
1 2 | :~# echo "Python - это язык программирования" | tr -d 'Pyt' hon - это язык программирования |
После выполнения приведенной выше команды появится следующий результат. В выводе удалены символы 'P', 'y' и 't'.
Опцию -c можно использовать вместе с опцией -d в команде `tr` для дополнения поиска, как в предыдущей команде -cs. В следующем примере команда `tr` с опцией -cd выполнит поиск всех нецифровых символов из строки "Phone No: 985634851" с использованием числового диапазона и удалит их.
1 | echo "Phone No: 985634851" | tr -cd '0-9' |
Вывод:
1 2 | :~# echo "Phone No: 985634851" | tr -cd '0-9' 985634854 |
После выполнения приведенной выше команды появится следующий результат. Вывод содержит только числовую часть строки.
Аналогично, вы можете использовать опцию -cd в команде `tr`, как в следующей команде, чтобы удалить непечатаемые символы из файла. '\n' - это непечатаемый символ, который будет удален из файла items.txt.
1 | tr -cd "[:print:]" < items.txt |
Вывод:
После выполнения приведенной выше команды появится следующий вывод. Вывод содержит содержимое файла items.txt после удаления символа новой строки (\n).
1 2 | :~# tr -cd "[:print:]" < items.txt AppleApricotAvocadoPineappleBANANA |
Удаление всех нечисловых символов
Команду `tr` можно также использовать для удаления всех нечисловых символов из текста, используя в команде [0-9] или [:digit:]. Выполните следующую команду, чтобы удалить все нечисловые символы из текста, используя класс [:digit:].
1 | echo "Цена товара 800 долларов" | tr -cd [:digit:] |
Вывод:
После выполнения приведенных выше команд появится следующий результат. Вывод содержит только цифры.
1 2 | :~# echo "Цена товара 800 долларов" | tr -cd [:digit:] 800 |
Печать значения $LS_COLORS в отдельной строке на основе разделителя
Любая переменная окружения со списком значений, разделенных двоеточием(:), может быть выведена в отдельные строки с помощью команды `tr`. $LS_COLORS - это переменная окружения, содержащая значения ключа и цвета, разделенные двоеточием. Выполните следующую команду для печати каждой пары ключа и цвета в каждой строке.
1 | echo $LS_COLORS | tr ':' '\n' |
Вывод:
После выполнения приведенных выше команд появится следующий результат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | echo $LS_COLORS | tr ':' '\n' rs=0 di=01;34 ln=01;36 mh=00 pi=40;33 so=01;35 do=01;35 bd=40;33;01 cd=40;33;01 or=40;31;01 mi=00 su=37;41 sg=30;43 ca=30;41 tw=30;42 ow=34;42 st=37;44 ex=01;32 *.tar=01;31 ... |
Преобразование содержимого файла на основе разделителя
Создайте текстовый файл с именем "students.txt" со следующим содержимым. Двоеточие(:) было использовано в качестве разделителя в каждой строке этого файла.
students.txt
1 2 3 | Md. Хоссейн:CSE:Batch-50:Semester-10 Нибир Рахман:CSE:Batch-51:Семестр-9 Мехназ Кази:CSE:Batch-52:Семестр-8 |
Выполните следующие команды для печати исходного содержимого текстового файла, создания файла output.txt путем преобразования двоеточия(:) файла students.txt в '\t' и печати содержимого файла output.txt.
1 2 | tr ':' '\t' < students.txt > output.txt $ cat output.txt |
Вывод:
После выполнения приведенных выше команд появится следующий результат. Файл output.txt содержит преобразованное содержимое файла students.txt.
1 2 3 4 | # cat output.txt Md. Хоссейн CSE Batch-50 Semester-10 Нибир Рахман CSE Batch-51 Семестр-9 Мехназ Кази CSE Batch-52 Семестр-8 |