Примеры использования Grep
Смотрим конфиги без комментариев
$ cat config_filename | grep -vE "^#|^$"
$ grep ^[^#] filename
Фильтр по списку слов
Отфильтровать строки без учёта регистра, содержащие одно из слов one, two, three:
$ cat file | grep -iE "(one|two|three)"
Рекурсивно с номером строки
Найти по папкам данное слово и вывести номер строки и путь до файла:
$ grep -nri 'foobar' *
Рекурсивный поиск шаблона в группе файлов
grep -R /way/to/any/folder/ foo
grep foo `ls -R /way/to/any/folder/text.file`
grep foo `find /way/to/any/folder/ -name "text.file"`
for file in /way/to/some/folder/text*.file; do grep foo $file; done
Убрать пустые строки в файле
$ grep -v '^$' input.txt > output.txt
Убрать все строки, что содержат ‘ba’
$ touch foo bar baz
$ ls | grep -v ba
foo
Фильтрация по строкам внешнего файла
Убрать из файла file.txt все строки, содержащиеся в файле not.wanted
$ cat not.wanted
2
4
6
8
$ cat file.txt
1
2
3
4
5
6
7
8
9
0
Применяем фильтр:
$ grep -v -f not.wanted file.txt
1
3
5
7
9
0
Grep из потока ввода
Найти вхождение числа 6 в потоке ввода и вывести его вместе с 2 строками до и одной строкой после
$ for i in {1..10} ; do echoi $i; done | grep 6 -B2 -A1
4
5
6
7
aGrep
Все варианты использования grep к ключами “-e” “-X” имеют “тяжелый” синтаксис.
Удобнее использовать утилиту agrep.
apt install agrep
Реализация условия OR (ИЛИ):
# netstat -tulpn | agrep '1527|2181|8081|8082|8083|8091'
tcp6 0 0 127.0.0.1:1527 :::* LISTEN 22890/java
tcp6 0 0 :::8091 :::* LISTEN 22894/java
tcp6 0 0 :::2181 :::* LISTEN 22889/java
tcp6 0 0 :::8081 :::* LISTEN 22890/java
tcp6 0 0 :::8082 :::* LISTEN 22891/java
tcp6 0 0 :::8083 :::* LISTEN 22893/java
Есть ограничение на длину списка параметров. В данном примере у меня отработало только 6 4-х разрядных числовых значения.
Реализация условия AND (И):
netstat -tulpn | agrep 'java;80'
tcp 0 0 127.0.0.1:8087 0.0.0.0:* LISTEN 1787/java
tcp6 0 0 :::8091 :::* LISTEN 22894/java
tcp6 0 0 127.0.0.1:32814 :::* LISTEN 3180/java
tcp6 0 0 :::8080 :::* LISTEN 2030/java
tcp6 0 0 :::8081 :::* LISTEN 22890/java
tcp6 0 0 :::8082 :::* LISTEN 22891/java
tcp6 0 0 :::8083 :::* LISTEN 22893/java
Дополнительные источники: