summaryrefslogtreecommitdiff
path: root/LINUX/tr.md
diff options
context:
space:
mode:
Diffstat (limited to 'LINUX/tr.md')
-rw-r--r--LINUX/tr.md84
1 files changed, 84 insertions, 0 deletions
diff --git a/LINUX/tr.md b/LINUX/tr.md
new file mode 100644
index 0000000..34a584a
--- /dev/null
+++ b/LINUX/tr.md
@@ -0,0 +1,84 @@
+**Прокачиваемся в tr**
+
+Более глубокий взгляд на tr
+`cat file | tr [:lower:] [:upper: ]
+
+Сегодня у нас на разборе одна из культовых утилит "**tr**". Используется она для форматирования текста: удаления и замены символов.
+
+Чаще всего можно встретить в паре со сторонними командами, которые выводят в **stdout** текстовый поток: **cat, head, echo** и т.д.
+
+Команда имеет следующий вид:
+
+$ tr флаг SET1 [SET2]
+
+Сетами представлены наборы символов, с которыми **tr** будет работать. Второй набор не всегда используется. 
+
+Команда разбирает текст посимвольно и выполняет операцию для каждого элемента отдельно.
+
+Флаги команды tr:
+1) **-d (--delete)**: удаляет элементы из первого набора:
+$ echo "Hello 123 world" | tr -d ' a-zA-Z'
+123
+1) **-c (--complement)**: обработать каждый символ, который не входит в набор "**SET1**":
+$ echo "Hello 123 world" | tr -cd 'a-zA-Z\n'
+Helloworld
+
+В примере мы удалили все символы, которые не входят в перечисление '**a-zA-Z\n**';
+
+Таким же макаром можно все буквы удалить и оставить только цифры:
+
+$ cat customer.csv
+
+USA,1234567890
+
+Canada,0987654321
+
+$ cat customer.csv | tr -cd '0-9\n'
+
+1234567890
+
+0987654321
+
+1) **-s (--squeeze-repeats)**: cжимает повторяющиеся символы из первого набора до одного:
+
+$ echo "Hello    World" | tr -s ' '
+
+Hello World
+
+1) **-t (--truncate-set1)**: обрезает первый набор до длины второго:
+
+$ echo "abcdef" | tr -t 'abcdef' '123'
+
+123def
+
+Если длина первого набора больше и мы не указываем флаг, каждый последующий его символ, который (**по номеру > конец "SET2"**), будет заменен:
+
+$ echo "abcdef" | tr 'abcdef' '123'
+
+123333
+
+При своем дефолтном поведении, программа заменяет символы из "**SET1**" на элементы "**SET2**":
+
+$ echo "Hello World" | tr 'a-z' 'A-Z'
+
+HELLO WORLD
+
+Команда умеет парсить шаблоны: **[:upper:], [:lower:]** и т.д. Детальнее можно ознакомиться в мануале:
+
+$ echo "hello world" | tr [:lower:] [:upper:]
+
+HELLO WORLD
+
+Данные на вход можно получить и через файлик. Для этого мы используем перенаправление:
+
+$ cat infile
+
+www.baeldung.com
+
+$ tr 'a-z' 'A-Z' < infile
+
+WWW.BAELDUNG.COM
+
+Измененные данные нужно куда-то записать? Правильно, перенаправляем вывод:
+
+$ tr 'a-z' 'A-Z' < infile > outfile \ No newline at end of file