Поиск файла с нужным содержимым в shell/bash
Что бы быстро найти файлы, внутри которых находится искомый набор символов, в *nix системах есть замечательная утилита grep
Если, к примеру, нам надо найти все файлы содержащие МАСКУ_ПОИСКА и находящиеся в текущей директории и во всех вложенных, то надо дать такую команду:
grep МАСКА_ПОИСКА * -R
Это сработает почти везде, кроме SunOS (Solaris).
find . -type f -exec grep -l МАСКА_ПОИСКА \{\} \;
Для любознательных ниже представлен полный перечень опций grep для стандартных (не SunOS) систем.
Использование: grep [OPTION]... PATTERN [FILE] ...
Ищет PATTERN в каждом FILE или стандартном вводе.
Пример: grep -i 'hello world' menu.h main.c
Ищет 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) |