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.