Учебники

Unix / Linux — трубы и фильтры

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

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

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

Команда 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

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

5

Совпадает в верхнем или нижнем регистре.

-v

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

-n

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

-l

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

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

Совпадает в верхнем или нижнем регистре.

Давайте теперь воспользуемся регулярным выражением, которое сообщает 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

Меняет порядок сортировки.

3

-f

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

4

+ х

Игнорирует первые поля x при сортировке.

-n

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

Меняет порядок сортировки.

-f

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

+ х

Игнорирует первые поля 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 и другие команды

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

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

$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%)

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

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