**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 **** &gt; 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**  **&quot;**** HELLO ****&quot; |**  **tr**  **–**** t ****L**** l ****       ** _(заменить &quot; __L__&quot; на &quot; __l__&quot; в полученном на вводе тексте);_

Команда **split** может разбить файла по каким-либо критериям, например:

**split**  **–**** l **** 2 1. ****txt**  _(разбить содержимое файла по две строчки);_

Команда **uniq** предназначена для поиска повторяющихся строк, например:

**uniq**  **–**** u **** 1. ****txt**  _(показать только уникальные строки);_

**Sed** – отдельный мощный инструмент, понимающий групповые символы, шаблоны и т.д. Будет рассмотрен немного подробнее в дальнейших урока. Работает, например, так:

**sed –e &#39;s/socks/people/&#39;  1.txt       ** _( __заменить__ в __файле__ слово_ _&quot;socks&quot;_ _на_ _&quot;people&quot;);_