Главная arrow Администрирование arrow FreeBSD, Linux, ... arrow grep: примеры использования Sunday, April 30 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

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

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

1. Команда grep позволяет распечатать строку(и) файла, в которой встретилось искомое слово. Например, команда
# grep gregor /etc/passwd
 выдаёт строку
gregor:*:1001:1001:gregorlgn:/home/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 )
 

Комментарии  

  1. #5 knzsoft
    2012-12-1217:22:34 Чтобы удалить все файлы кроме тех, что заданы образцом регулярного выражения следует выполнить

    $ rm `ls | grep -v `

    Будьте осторожны, отработайте сначала список удаляемых файлов, образуемых выражением

    ls | grep -v
  2. #4 pl
    2011-04-0421:52:16 Можно ли возможности grep использовать в скриптах на языке программировани я python? Т. е. как встроить вызов grep в python-программу?

    microsin: grep всего лишь придуман для обработки и фильтрации строк. Для этой цели (вместо grep) в Python лучше использовать регулярные выражения (Regular Expressions, RegEx). С помощью регулярных выражений в Python Вы сможете сделать все то же самое, что можно делать с помощью grep. Кстати, grep в своих фильтрах также использует регулярные выражения.
  3. #3 Peter
    2010-12-2523:40:48 Спасибо за [url='http://ya.ru']материал[/url]
  4. #2 alexandra
    2010-10-1716:31:48 Не работает, потому, что на вход grep'у подается список файлов (+путь), которые нашел find. В именах этих файлов grep пытается найти "test". Чтобы выаолнить grep для каждого файла, который нашел find используйте опцию -exec.
    Например вот так:

    # find / -name "*.sh" - exec grep test {} /;
  5. #1 Маша
    2010-10-1311:20:31 Спасибо за материал про этот grep, но эта конструкция у меня почему-то не работает:
    # find / -name "*.sh" | grep test
    Нужно вывести все файлы, где встречается заданное слово. Подскажите как сделать?

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017