**103.2** Управление текстовым потоком Студент должен уметь управлять фильтровать текстовый поток **Изучаем** : - применение текстовых фильтров с использованием встроенных команд UNIX **Термины и утилиты: ** - cat - cut - expand - fmt - head - join - less - nl - od - paste - pr - sed - sort - split - tail - tr - unexpand - uniq - wc Множество файлов в Linux неудобны для восприятия без предварительного форматирования, кроме того процесс обработки текстовой информации часто требует ее форматирования, обрезания, сортировки и т.д. Linux предлагает широкий набор инструментов редактирования текстового вывода, при этом следует заметить что указанные инструменты не затрагивают исходный файл (или текстовый поток), а форматируют его, выдавая полученный результат в консоль или другой файл. Простой вывод текста (без корректировки содержимого): Для вывода содержимого файла или объединения нескольких файлов на выводе используется команда **cat** , например: **с**** at **** 1. ****txt** **2.**** txt **** > 3. ****txt**** ** _(передать содержимое двух файлов в третий);_ Команда **join** объединяет строки нескольких файлов по общему полю и отправляет их на стандартный вывод. Команда **less** загружает файл постепенно и также отправляет его на вывод (удобно для больших файлов). Команда **nl** нумерует строки. Команда **pr** показывает, как содержимое файла будет выглядеть при выводе его на печать. Команда **paste** вставляет строки из одного файла в другой и отправляет результат на стандартный вывод. Команда **head** показывает первые строки файла, а **tail** – последние. Например: **head** **–**** n **** 2 / ****var**** / ****log**** / ****syslog**** ** _(вывести первые две строчки файла);_ **tail** **–**** f **** / ****var**** / ****log**** / ****syslog**** ** _(показывать последние строки файла, отображая содержимое в реальный момент времени);_ Команда **sort** может отсортировать содержимое файла по какому-нибудь признаку, например: **sort** **1.**** txt **** ** _(отсортировать строки по алфавиту);_ Команда **wc** позволяет посчитать количество символов и т.д. в текстовом потоке, например: **wc** **1.**** txt** _(посчитать количество строк, символов, слов);_ Вывод форматированного текста (с корректировкой содержимого): Команда **cut** используется для обрезания содержимого файлов на выводе, например: **с**** ut **** – ****c** **2,3,4,5,10 1.**** txt **** ** _(показывать только символы на указанных позициях: 2,3,4,5,10);_ Команда **expand** превращает символы табуляции в несколько пробелов, а **unexpand** наоборот – пробелы в символы табуляции. Команда **fmt** предназначена для форматирования текста различными способами, например: **fmt** **1.**** txt **** ** _(вывести содержимое файла в одну строку);_ **fmt** **–**** w **** 10 1. ****txt**** ** _(вывести содержимое файла в строки не больше 10 символов каждая);_ Команда **od** предназначена для конвертации текста в другой формат, например: **od** **–**** c **** 1. ****txt**** ** _(отобразить в кодировке_ _ASCI__);_ Команда **tr** предназначена для замены и удаления символов в текстовом потоке, например: **echo** **"**** HELLO ****" |** **tr** **–**** t ****L**** l **** ** _(заменить " __L__" на " __l__" в полученном на вводе тексте);_ Команда **split** может разбить файла по каким-либо критериям, например: **split** **–**** l **** 2 1. ****txt** _(разбить содержимое файла по две строчки);_ Команда **uniq** предназначена для поиска повторяющихся строк, например: **uniq** **–**** u **** 1. ****txt** _(показать только уникальные строки);_ **Sed** – отдельный мощный инструмент, понимающий групповые символы, шаблоны и т.д. Будет рассмотрен немного подробнее в дальнейших урока. Работает, например, так: **sed –e 's/socks/people/' 1.txt ** _( __заменить__ в __файле__ слово_ _"socks"_ _на_ _"people");_