В этой главе мы подробно обсудим каналы и фильтры в 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%)
Экран заполнится, как только на экране появится текст, состоящий из строк, отсортированных по порядку размера файла. В нижней части экрана находится подсказка, в которой вы можете ввести команду для перемещения по отсортированному тексту.
Когда вы закончите с этим экраном, вы можете использовать любую из команд, перечисленных в обсуждении дополнительной программы.