Фильтрация контента

10.7 Фильтрация контента

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

Например, чтобы найти всех пользователей, которые могут войти в систему с оболочкой BASH, grepможно использовать команду для фильтрации строк из /etc/passwdфайла для строк, содержащих шаблон bash:

sysadmin@localhost:~$ grep bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
sysadmin:x:1001:1001:System Administrator,,,,:/home/sysadmin:/bin/bash

Чтобы было проще увидеть, что именно совпадает, используйте --colorопцию. Эта опция выделит совпадающие элементы красным цветом:

sysadmin@localhost:~$ grep --color bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
sysadmin:x:1001:1001:System Administrator,,,,:/home/sysadmin:/bin/bash

В некоторых случаях важно не найти конкретные строки, соответствующие шаблону, а то, сколько строк соответствует шаблону. Опция -cобеспечивает подсчет количества совпадений строк:

sysadmin@localhost:~$ grep -c bash /etc/passwd
2

При просмотре вывода команды grepможет быть трудно определить исходные номера строк. Эта информация может быть полезна при возврате в файл (возможно, для редактирования файла), чтобы быстро найти одну из совпадающих строк.

Опция -nкоманды grepбудет отображать исходные номера строк. Чтобы отобразить все строки и их номера строк в /etc/passwdфайле, содержащем шаблон bash:

sysadmin@localhost:~$ grep -n bash /etc/passwd                          
1:root:x:0:0:root:/root:/bin/bash                                       
27:sysadmin:x:1001:1001:System Administrator,,,,:/home/sysadmin:/bin/bash

Опция -vинвертирует совпадение, выводя все строки, не содержащие шаблон. Чтобы отобразить все строки, не содержащиеся nologinв /etc/passwdфайле:

sysadmin@localhost:~$ grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:4:65534:sync:/bin:/bin/sync
operator:x:1000:37::/root:/bin/sh
sysadmin:x:1001:1001:System Administrator,,,,:/home/sysadmin:/bin/bash

Опция -iигнорирует различия регистра (заглавных букв). Следующее ищет шаблон theв newhome.txt, позволяя каждому символу быть в верхнем или нижнем регистре:

sysadmin@localhost:~$ cd Documents
sysadmin@localhost:~/Documents$ grep -i the newhome.txt
There are three bathrooms.
**Beware** of the ghost in the bedroom.
The kitchen is open for entertaining.
**Caution** the spirits don't like guests.

Опция -wвозвращает только те строки, которые содержат совпадения, образующие целые слова. Чтобы быть словом, перед строкой символов должен стоять символ, не являющийся словом. К словесным символам относятся буквы, цифры и символ подчеркивания.

В следующих примерах выполняется поиск шаблона areв newhome.txtфайле. Первая команда выполняет поиск без параметров, а вторая команда включает параметр -w. Сравните результаты:

sysadmin@localhost:~/Documents$ grep are newhome.txt
There are three bathrooms.
**Beware** of the ghost in the bedroom.
sysadmin@localhost:~/Documents$ grep -w are newhome.txt
There are three bathrooms.

Last updated