Unix / Linux - конвейеры и фильтры

В этой главе мы подробно обсудим конвейеры и фильтры в Unix. Вы можете соединить две команды вместе, чтобы выходные данные одной программы становились входными данными следующей программы. Две или более команды, соединенные таким образом, образуют канал.

Чтобы сделать трубу, поставьте вертикальную планку (|) в командной строке между двумя командами.

Когда программа принимает входные данные из другой программы, она выполняет некоторые операции с этими входными данными и записывает результат в стандартный выходной поток. Это упоминается какfilter.

Команда grep

Команда grep ищет в файле или файлах строки с определенным шаблоном. Синтаксис -

$grep pattern file(s)

Название "grep" поступает из команды ed (строковый редактор Unix) g/re/p что означает «глобальный поиск регулярного выражения и печать всех содержащих его строк».

Регулярное выражение - это простой текст (например, слово) и / или специальные символы, используемые для сопоставления с образцом.

Самый простой способ использования grep - это поиск шаблона, состоящего из одного слова. Его можно использовать в конвейере, чтобы на стандартный вывод отправлялись только те строки входных файлов, которые содержат заданную строку. Если вы не укажете grep имя файла для чтения, он прочитает свой стандартный ввод; так работают все программы фильтрации -

$ls -l | grep "Aug"
-rw-rw-rw-   1 john  doc     11008 Aug  6 14:10 ch02
-rw-rw-rw-   1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--   1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

Существуют различные варианты, которые вы можете использовать вместе с grep команда -

Sr.No. Вариант и описание
1

-v

Печатает все строки, не соответствующие шаблону.

2

-n

Печатает совпавшую строку и ее номер.

3

-l

Печатает только имена файлов с совпадающими строками (буква «l»)

4

-c

Печатает только количество совпадающих строк.

5

-i

Соответствует верхнему или нижнему регистру.

Давайте теперь используем регулярное выражение, которое сообщает grep искать строки с "carol", за которым следует ноль или другие символы, сокращенные в регулярном выражении как «. *»), затем следует «Aug».

Здесь мы используем -i возможность иметь поиск без учета регистра -

$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

Команда сортировки

В sortкоманда упорядочивает строки текста в алфавитном или цифровом порядке. В следующем примере сортируются строки в файле еды -

$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java

Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$

В sortКоманда по умолчанию упорядочивает строки текста в алфавитном порядке. Есть много опций, которые контролируют сортировку -

Sr.No. Описание
1

-n

Сортировка численно (пример: 10 отсортирует после 2), игнорирует пробелы и табуляции.

2

-r

Изменяет порядок сортировки на обратный.

3

-f

Сортировка прописных и строчных букв вместе.

4

+x

Сначала игнорирует x поля при сортировке.

В канал можно связать более двух команд. Взяв предыдущий пример трубы с использованиемgrep, мы можем дополнительно отсортировать файлы, измененные в августе, по размеру.

Следующий канал состоит из команд ls, grep, и sort -

$ls -l | grep "Aug" | sort +4n
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-rw-  1 john  doc     11008 Aug  6 14:10 ch02
$

Этот канал сортирует все файлы в вашем каталоге, измененные в августе, по порядку размера и печатает их на экране терминала. Параметр сортировки + 4n пропускает четыре поля (поля разделяются пробелами), а затем сортирует строки в числовом порядке.

Команды pg и другие

Длинный вывод обычно можно заархивировать на экране, но если вы пропустите больше текста или воспользуетесь pgкоманда как фильтр; отображение прекращается, когда экран заполняется текстом.

Предположим, у вас есть длинный список каталогов. Чтобы упростить чтение отсортированного списка, направьте вывод черезmore следующим образом -

$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--  1 john  doc     14827 Aug  9 12:40 ch03
	.
	.
	.
-rw-rw-rw-  1 john  doc     16867 Aug  6 15:56 ch05
--More--(74%)

Экран заполнится, как только экран заполнится текстом, состоящим из строк, отсортированных по размеру файла. Внизу экрана находится значокmore приглашение, в котором вы можете ввести команду для перемещения по отсортированному тексту.

Когда вы закончите работу с этим экраном, вы можете использовать любую из команд, перечисленных в обсуждении программы more.