Примеры использования 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

Дополнительные источники:

  1. Stackexchange
  2. Stackoverflow