grep: примеры использования
Написал microsin   
31.03.2008

Утилита grep применяется как универсальное средство для фильтрации строк текста по шаблону, возможно использование в качестве шаблона регулярных выражений. Есть также синонимы для этой команды - fgrep и egrep, причем egrep использует регулярные выражения, а grep и fgrep ничем не отличаются.

1. Команда grep позволяет распечатать строку(и) файла, в которой встретилось искомое слово. Например, команда
# grep gregor /etc/passwd
 выдаёт строку
gregor:*:1001:1001:gregorlgn:/var/www/gregor:/bin/sh
 что говорит о том, что командный интерпретатор для пользователя gregor - sh.

2. Для поиска по содержимому файлов (не по имени) нужно использовать find совместно с grep. Например, следующая команда выводит список скриптов, в содержимом которых содержится слово test (поиск стартует рекурсивно с корневого каталога):
# find / -name "*.sh" | grep test

3. Поиск нужного демона среди запущенных процессов:
% ps -ax | grep inetd
  198  ??  IWs    0:00.00 inetd -wW

4. Игнорирование регистра (большие или маленькие буквы) при фильтрации:
# pkg_info | grep -i mc-4.6.0_13

5. Пример использования в командном файле (скрипте).
temp=`eval ifconfig $outside | grep -E -o --max-count=1 --regexp=$regex`
Здесь в переменную $temp записывается результат фильтрации вывода ifconfig. Опция -E включает использование регулярных выражений в шаблоне (grep -E синоним egrep), -o включает вывод не всей строки, а только то, что совпало с шаблоном, --regexp задает шаблон - регулярное выражение.

6. grep можно использовать как фильтр строк, в которых не содержится слово.
Следующая строка ищет все строки, в которых встречается слово cdp (locate cdp), но не встречается слово cdplay (grep -v cdplay):
# locate cdp | grep -v cdplay | more

7. Есть большой лог пингования хоста (просто в bat-файле по бесконечному циклу запускается ping, и результат выводится в этот лог). Нужно из него вырезать только те места, в которых есть пропадание доступности хоста. Идея простая - grep ищет слова 25%, 50%, 75% и 100%, и выдает 52 строки перед совпадением:
# more pinglog.txt | grep -f ping_patterns.txt -B 52 > pinglog_filtered.txt
Теперь комментарии. Входной файл, как вы уже догадались pinglog.txt, выводит на вход grep команда more. Опция -f указывает grep брать паттерны для совпадения из файла ping_patterns.txt. Содержимое ping_patterns.txt (не забываем в конце этого файла указать возврат каретки):
25%
50%
75%
100%
Далее опция -B указывает включить в вывод grep еще 52 строки ПЕРЕД местом, где обнаружено совпадение с паттерном. Таким образом, в файл pinglog_filtered.txt попадет только то, что нам нужно.

Последнее обновление ( 04.05.2008 )