| Опция | Описание |
|---|---|
| -o | показывать только найденное совпадение по регулярке |
| -v | не показывать найденные строки |
| -c | подсчитать количество строк |
| -i | не учитывать регистр |
| -P | Perl выражения \d |
| -r | Прочитать все файлы в каждой папке, рекурсия |
| -l | Файл, содержащий строки для поиска |
| ^ | Поиск с начала строки |
| .$ | Поиск до конца файла |
| ^$ | Поиск пустых строк |
| Параметр | Описание |
|---|---|
| -b | Выведите байтовое смещение совпадения во входном файле |
| -H | Печатать имя файла, содержащего совпадение |
| -h | Не печатать имя файла, содержащего совпадение |
| -n | Печатать номер строки каждого совпадения |
| -T | Печатать начальный символ Tab перед совпадениями, чтобы вывод был аккуратно выровнен |
| Параметр | Описание |
|---|---|
| -c | Выведите только количество строк, содержащих совпадение |
| –colo[u]r | Подсвечивать совпадения |
| -l | Выведите имена файлов с совпадениями |
| -L | Выведите имена искомых файлов, которые не содержат совпадений |
| -o | Печатать только совпадающую часть строки |
| -s | Подавление ошибок (например, несуществующих или нечитаемых файлов) |
| -A n | Выведите n количество строк после совпадающей строки |
| -B n | Выведите n количество строк перед совпадающей строкой |
| -C n | Выведите n количество строк до и после совпадающей строки |
По умолчанию, чтобы OR воспринимался, как регулярка, его надо экранировать
grep 'fatal\|error\|critical' /var/log/nginx/error.log
или включить режим расширенных регулярных выражений –extended-regexp
grep -E 'fatal|error|critical' /var/log/nginx/error.log
Но так будут искаться вхождения слов. Чтобы искать только целые слова, нужно
grep -w 'fatal\|error\|critical' /var/log/nginx/error.log
Регистронезависимый поиск
grep -i 'fatal\|error\|critical' /var/log/nginx/error.log
grep ^[^#] /etc/postfix/main.cf # без пробелов egrep -v "^$|^[[:space:]]*;" /etc/php/7.1/cli/php.ini # или так egrep -v "^$|^[[:space:]]*#" /etc/postfix/main.cf
| Выражение | Описание |
|---|---|
| ^$ | Совпадение для удаления пустых строк |
| ^[[:space:]]*# или ^[[:space:]]* | Совпадение строк начинающихся на # или ; или содержит пробелы или табуляцию |
| | | оператор или в регулярных выражениях |
Скрипт nocomment, который можно использовать самостоятельно с параметром или через pipe.
#!/bin/sh egrep -a -v '^[[:space:]]*#' $1 | egrep -a '[[:print:]]'
grep -roih "[A-z0-9._-]*@[A-z0-9._-]*\.ru" /usr/share/doc | sort -u | wc
Или
egrep "^(aaa|bbb|ccc)" - начинается на aaa, bbb или ccc
Общий синтаксис
grep [pattern] FILE
| Настройка | Описание |
|---|---|
| grep '^[A,E].*o' f.txt | Найти строки, начинающиеся на A или E и заканчивающиеся на o |
| grep -f pat.txt f.txt | Сканировать файл f.txt, используя содержимое pat.txt |
| grep -i Gnu f.txt | Поиск Gnu в файле f.txt без учёта регистра |
| grep -v gnu f.txt | Поиск строк не содержащих gnu |
| grep -w 'a.*o' f.txt | Поиск совпадений слов, игнорируя подстроки |
| grep -x 'a.*o' f.txt | Найти целые строку, удовлетворяющие только, как ^(a.*o) |
| Параметр | Описание |
|---|---|
| -a | Обработайте двоичный файл так, как если бы он был текстовым |
| -D <skip|read> | Пропуск или чтение FIFO, устройства или сокета |
| -d <skip|read|recurse> | Пропуск, чтение или перемещение по каталогу |
| --exclude '*.sh' | Не ищите файлы с суффиксом .sh |
| --exclude-from FILE | Пропустите любой файл, указанный в списке FILE |
| --exclude-dir *foo | Пропустите любую директорию, заканчивающуюся на foo |
| -r | Когда встречается каталог, поиск файлов в нем |
| -R | Поиск по каталогам и следование симлинкам |
| Параметр | Описание |
|---|---|
| -G | Use basic regex (this is the default) |
| -E | Extended regex |
| -F | Interpret the search pattern as a fixed string, not regex |
| -P | Use Perl regex (PCRE) |
| Параметр | Описание | |
|---|---|---|
| . | Any single character | |
| ? | Match preceding item zero or one time | |
| * | Match preceding item zero or more times | |
| + | Match preceding item one or more times | |
| {2} | Match preceding item two times | |
| {3,} | Match preceding item three or more times | |
| {,4} | Match preceding item at most four times | |
| {1,5} | Match preceding item at least once, but no more than five times | |
| [A,B] | Match A or B [:alnum:] Alphanumeric character | |
| [3-9] | Match all digits 3 to 9 [:alpha:] Alphabetic character | |
| Start of a line [:digit:] Digits 0 through 9 | ||
| $ | End of a line [:punct:] Punctuation | |
| \s | Space [:space:] Space |
grep searches the named input FILEs (or standard input if no files are named, or if a single hyphen-minus (-) is given as file name) for lines containing a match to the given PATTERN. By default, grep prints the matching lines
Найти Find all lines matching a specific keyword on a file.
grep sysadmin /etc/passwd
Display with numbers
grep -nv nologin /etc/passwd To avoid the keyword and search for other
grep -v sysadmin /etc/passwd To count how many lines match for the keywords we are searching
grep -c sysadmin /etc/passwd To search text by ignoring the case
grep -i sysadmin /etc/passwd Search all files in /home and its subdirectories for text matching a specific pattern and print the matching lines
grep -ri sysadmin /home/ Search all files in /home and its subdirectories for text matching a specific pattern and list the files which contain it
grep -ril sysadmin /home/ To search for a particular IP mentioned among many IPs. The -F ensures that the . match literal . characters, without it they would match any character.
grep -F "192.168.1.10" /var/log/syslog To search for a line that starts with Feb
grep ^Feb /var/log/syslog To search for a line that ends with queue
grep queue$ /var/log/mail.log To count the empty lines in a file (lines containing whitespace will not be counted)
grep -c ^$ /var/log/mail.log Search for a string inside all files of a directory and its subdirectories
grep -r "root" .
Try this GNU grep command with -P(Perl-regex) option,
grep -oP '\bs.*a\b' file
Explanation:
\b # Matches the word boundary(ie, match between a word character and a non word character) s # Starting character would be a literal s. .* # Matches any character zero or more times. a # Matches a literal a. \b # Matches the word boundary(ie, match between a word character and a non word character) Share Improve this answer Follow