diff options
Diffstat (limited to 'LINUX/tr.md')
| -rw-r--r-- | LINUX/tr.md | 84 |
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 |
