Фильтрация контента
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