Поиск файла с нужным содержимым в 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) |