S3.Blog

16 Апреля 2024
A A A   RSS-лента
"Я знаю, что ничего не знаю, но многие не знают и этого". Сократ [?].

Shell/Bash: Grep - поиск файла с нужным содержимым

Дата последнего изменения: 16 Октября 2009
Метки статьи: Документация, Linux, RedHat, Shell/Bash, Solaris
Что бы быстро найти файлы, внутри которых находится искомый набор символов, в *nix системах есть замечательная утилита grep
 

Если, к примеру, нам надо найти все файлы содержащие МАСКУ_ПОИСКА и находящиеся в текущей директории и во всех вложенных, то надо дать такую команду:
grep МАСКА_ПОИСКА * -R

Это сработает почти везде, кроме SunOS (Solaris).

Разработчики этой операционной системы (SunOS) почему-то посчитали что у ихнего grep функция рекурсивного поиска файлов совсем не обязательна. Но безвыходных ситуаций не бывает - воспользуемся find. Ниже приведенный пример выполняет поиск файлов и выводит их имена, если содержимое соответствует МАСКЕ_ПОИСКА
find . -type f -exec grep -l МАСКА_ПОИСКА \{\} \;

Для любознательных ниже представлен полный перечень опций grep для стандартных (не SunOS) систем.

Использование: grep [OPTION]... PATTERN [FILE] ...
Ищет PATTERN в каждом FILE или стандартном вводе.
Пример: grep -i 'hello world' menu.h main.c

Выбор типа регулярного выражения и его интерпретация:
-E --extended-regexp PATTERN - расширенное регулярное выражение
-F --fixed-regexp PATTERN фиксированная строчка, разделенная концами строк
-G --basic-regexp PATTERN простой регулярное выражение
-P --perl-regexp PATTERN регулярное выражения языка Perl

Выбор типа регулярного выражения и интерпретации:
-e --regexp=PATTERN использовать PATTERN как регулярное выражение
-f --file=FILE брать PATTERN из FILE'а
-i --ignore-case игнорировать раличие регистров
-w --word-regexp PATTERN должен подходить ко всему слову
-x --line-regexp PATTERN должен подходить ко всей строке
-z --null-data строчки оканчиваются на байт 0, а не на конец строки

Разноообразные:
-s --no-messages подавлять сообщения об ошибках
-v --revert-match выбирать не подходящие строки
-V --version напечатать информацию о версии и выйти
  --help показать помощь и выйти
  --mmap использовать mmap ввод по возможности

Управление выводом:
-m --max-count=NUM остановиться после NUM совпадений
-b --byte-offset печатать вместе с выходными строчками смещение в байтах
-n --line-number печатать номер строки вместе с выходными строчками
  --line-buffered сбрасывать буфера каждую строчку
-H --with-filename печатать имя файла для каждого совпадения
-h --no-filename подавить вывод имени файла на выходе
  --label=LABEL выводить LABEL вместо имени файла
-q --quiet, --silent подавить весь обычный вывод
  --binary-files=TYPE считать что бинарный файл типа:
TYPE - 'binary', 'text', или 'without-match'
-a --text не подавлять бинарный вывод
-I   то же, что и --binary-files=without-match
-d --directories=ACTION как обрабатывать каталоги
ACTION может быть 'read' (читать),
'recurse' (рекурсивно), или 'skip' (пропускать)
-D --devices=ACTION как обрабатывать устройства, каналы и сетевые каналы
ACTION может быть 'read' или 'skip'
-R, -r --recursive аналогично --directories=recurse.
  --include=PATTERN обработать файлы, удовлетворяющие PATTERN
  --exclude=PATTERN пропустить файлы, удовлетворяющие PATTERN
  --exclude-from=FILE пропустить файлы, удовлетворяющиеPATTERN в FILE
-L --files-without-match печатать только имена файлов без совпадений
-l --files-with-matches печатать только имена файлов с совпадениями
-c --count печатать только количество совпадающих строк на файл
-Z --null печатать байт 0 после имени файла

Управление контекстом:
-B --before-context=NUM печатать NUM строк предшествующего контекста
-A --after-context=NUM печатать NUM строк последующего контекста
-C --context[=NUM] печатать NUM строк контекста, если не перекрывается -A или -B
  --color[=WHEN], --colour[=WHEN] использовать маркеры для различия совпадающих строк
WHEN может быть `always' (всегда), `never' (никогда) или `auto' (автоматически)
  --color, --colour использовать маркеры для различия совпадающих строк
-NUM   то же, что и --context=NUM
-U --binary не удалять сиволы CR в конце строки (MSDOS)
-u --unix-byte-offsets выдавать смещение, как-будто нет CR-ов (MSDOS)


Похожие материалы:




 
  Имя *:   Решите пример *: =
 
Полужирный Курсив Подчеркнутый Перечеркнутый
 
Вставить изображение Сделать цитатой Вставить ссылку Вставить код

Вставить смайл
 
 

 



© S3.Blog: Если критикуешь, не предлагая решения проблемы, то ты становишься частью этой проблемы.