Grep - утилита командной строки, которая находит на вводе строки, отвечающие заданному регулярному выражению, и выводит их, если вывод не отменён специальным ключом.

-Найти строку needle:

# grep needle haystack.txt

в этом случае grep ищет именно набор символов, а не слово, будут отображены строки, включающие слово “needless” и другие слова, в которых встречается последовательность “needle”

 

-Найти символ звездочка:

# grep '*' /etc/profile

 

-Найти только слово needle:

# grep -w needle haystack.txt
или:
# grep -w ' needle ' haystack.txt

 

-Найти слова в верхнем регистре, длинной более 5 символов:

# grep -w "[A-Z]+{5,}" channel.log

 

-Найти слова, оканчивающиеся на -kot.

# grep 'kot\>' kot.txt

 

-Найти слова, начинающиеся на kot.

# grep '\<kot' kot.txt

 

-Удалить закоменченные и пустые строки:

# cat config_filename | grep -vE "^#|^$" 

 

-Отфильтровать строки без учёта регистра, содержащие одно из слов one, two, three:

# cat file | grep -iE "(one|two|three)" 

 

-Найти слово function_nam и указать номер строки:

# grep -rnw function_name /home/www/dev/myprogram/

 

-Скрыть имя файла в выводе (-h):

# grep -rnh 'mail.ru'  /var/www/blog/www/
20:    public $live_site = 'https://mail.ru';
20:    public $live_site = 'https://mail.ru'; 

 

-Вывести только имена файлов (-l):

# grep -rl 'mail.ru'  /var/www/
/var/www/configuration.php.BAK
/var/www/configuration.php

сканирование каждого из заданных файлов продолжается только до первого совпадения с ОБРАЗЦОМ.

 

-Вывести только имена файлов, где НЕ встретился образец (-L):

# grep -rL 'mail.ru'  /var/www/

 

-Вывести только точное совпадение с шаблоном, выводит только слово, а не строку (-o):

# grep -o Chrome* access.log
Chrome
Chrome

 

-Вывести только точное совпадение СТРОКИ с шаблоном (-x):

# grep -x ‘12345’ access.log

 

-Вывести только количество совпадений (-c):

# grep -c "^user_at_\(home\|work\)" channel.log

 

-Исключить строку с указанным словом (-v):

# grep -v bash /etc/passwd

 

-Игнорировать регистр искомого слова (-i):

# grep -i games ~/.bash* 

 

-Найти по папкам данное слово и вывести номер строки и путь до файла:

# 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 :$ /etc/passwd

 

-Воспринимать образец как ОБРАЗЕЦ:

# grep -e '--анонимность' anonim.txt

 

-Вывести 2 верхние и нижние строки от результата:

# grep -C2 -e  '--анонимность' anonim.txt

 

-Вывести одну верхнюю строку от результата:

# grep -A1 -e  '--анонимность' anonim.txt

 

-Вывести одну нижнюю строку от результата:

# grep -B1 -e  '--анонимность' anonim.txt

 

-Искать в бинарных файлах тоже:

# grep -a menu /boot

 

-Можно ли искать одновременно в стандартном вводе и в файле?. Можно, если перед именем файла поставить дефис:

# echo многие употребляют астериск неправильно | grep 'астериск' - example/* 

 

-Задать образцы поиска из файла:

# grep -f pattern.txt /etc/passwd

Предупреждение: Эта полезная опция, к сожалению, работает не на всех версиях grep.

 

-Не выводить сообщения о несуществующих или нечитаемых файлах:

# grep -s test anonim.txt

 

-При рекурсивном исследовании директорий обследовать только файлы, содержащие в своем имени ОБРАЗЕЦ_имени_файла:

# grep -r --include=ОБРАЗЕЦ_имени_файла test /boot

 

-При рекурсивном исследовании директорий пропускать файлы, содержащие в своем имени ОБРАЗЕЦ_имени_файла:

# grep -r --exclude=ОБРАЗЕЦ_имени_файла test /boot
# grep -r --exclude="*.cmd"  "ckin" ./

 

-Прекратить обработку файла после того, как количество совпадений с ОБРАЗЦОМ достигнет ЧИСЛА_СТРОК:

# grep -m2 'kot' kot.txt

 

Команда grep и регулярные выражения

Опция -G (--basic-regexp) Рассматривает ОБРАЗЕЦ как базовое регулярное выражение. Эта опция используется по умолчанию.

Опция -E (--extended-regexp) Рассматривает ОБРАЗЕЦ как расширенное регулярное выражение.

Опция -P (--perl-regexp) Рассматривает ОБРАЗЕЦ как регулярное выражение языка Perl.

Опция -F (--fixed-strings) Рассматривает ОБРАЗЕЦ как список "фиксированных выражений" (fixed strings - термин из области регулярных выражений), разделенных символами новой строки. Будет искать соответствия любому из них.Кроме того, существуют две альтернативные команды EGREP и FGREP. Обе они соответствуют опциям -E и -F соответственно.

 

Символьные классы

-Найти все строки, содержащие цифры в диапазоне 1-7:

# grep [1-7] /etc/passwd

 

-Найти все строки, НЕ содержащие цифры в диапазоне 1-7:

# grep [^1-7] /etc/passwd

 

-Найти все строки, содержащие буквы:

# grep [agh] /etc/passwd

 

Универсальные символы (метасимволы)

-Используйте "." для поиска соответствия любому одиночному символу. Если вы хотите получить список всех английских слов, взятых из словаря, содержащих пять символов, начинающихся с "c" и заканчивающихся "h" (удобно для решения кроссвордов):

# grep 'c...h' /usr/share/dict/words
catch
clash
cloth
… 

 

-Чтобы подобным образом найти слова, в которых между "c" и "h" может находиться любое число символов, используйте звездочку (*). В приведенном ниже примере из системного словаря выбираются все слова, начинающиеся с "c" и заканчивающиеся символом "h":

# grep '<c.*h>' /usr/share/dict/words
caliph
cash

 

-Выборка пользователей на кириллице из error.log Apache:

# grep -wi '^.*) [А-Я]' /var/log/apache2/error.log > /home/myuser/users.log

 

 

Материалы:

http://fx-files.ru/archives/214

http://aidalinux.ru/w/Grep