tag: #N/S/Synthesizing #N/T/Linux #N/T/Tool/Util #N/T/Public 2021-11-30 19:58, [Source](), Related: [[% rigrep]] [[% Pgrep]] [[regexp]] Docs: ## Описание Команда grep используется для поиска заданного текста в файле или потоке данных. Она позволяет искать совпадения по регулярному выражению ([[regexp]]) и выводить строки, содержащие найденный текст. ## Шаблон ```bash /usr/xpg4/bin/grep [ -E | -F ] [ -c | -l | -q ] [ -bhinsvwx ] [ -e список_образцов ... ] -f файл_образцов ... [ имя_файла ... ] ``` ## Примеры: ##### Очистка файла от коментариев, и пустых строк ```bash egrep -v '(^#|^\s*$|^\s*\t*#)' !$ or filename ``` which also excludes comment lines starting with TAB or SPACE and nothing else before the comment (frequent in config files with multi-line comments behind a setting). ##### Греп нескольких фраз, и ошибок ```bash tail -f /var/log/maillog |egrep -i '(warning|error|fatal|panic|ssl)' ``` ### Шпаргалки: https://najomi.org/_nix/grep ##### Подсветки Выбор цвета осуществляется с помощью переменной окружения **GREP_COLOR**: export GREP_COLOR=36 дает голубой цвет, а export GREP_COLOR=32 - зеленый лайм. ```bash grep --color=always abc a_file.txt ``` #### grep with multiple patterns | Греп множественных паттернов Here are all other possibilities: 1. Use single quotes in the pattern: grep 'pattern*' file1 file2 ##### Search all text files ```bash grep 'word*' *.txt # или grep 'word1\|word2\|word3' /path/to/file ### Search all python files for 'wordA' or 'wordB' ### grep 'wordA*'\''wordB' *.py ``` 2. Use extended regular expressions: egrep 'pattern1|pattern2' \*.py ```bash grep -E 'word1|word2' *.doc ``` или ##### Negative match Use multiple patterns with grep -v. So you can print all lines in a file except those containing the multiple patterns you specify. ```bash egrep -v 'Googlebot|msnbot-media|YandexBot|bingbot' *.log ``` If you wanted to do all in one command, you could go w/ sed instead ![[% sed#Удалить несколько патернов из файла]] 3. Use this syntax on older Unix shells: grep -e pattern1 -e pattern2 \*.pl ##### Grep нескольких патернов в нескольких директориях ```bash grep -ri -e "Patter1 " -e " Pattern2 " /srv/vmail/{subdir1,subdir2,}/ ``` ##### Рекурсивный поиск шаблона в группе файлов ```bash grep -R /way/to/*any/folder/ foo grep foo `ls -R /way/to/any*/folder/text.file` grep foo `find /way/to/*any/folder/ -name "text.file"` for file in /way/to/some/folder/text*.file; do grep foo $file; done ``` ##### Рекурсивно найти по папкам данное слово и вывести номер строки и путь до файла: ```bash $ grep -nri 'foobar' * ``` ![[% xargs#Объединение xargs с grep для поиска строки в списке файлов, предоставленном этой командой.]] ##### Убрать из файла file.txt все строки, содержащиеся в файле not.wanted Из одного файла удалить все строки другого файла ```bash grep -v -f not.wanted file.txt #Или grep -F -v -f file_what_delete.txt file_where_delete.txt > result.txt ``` ##### Найти вхождение числа 6 в потоке ввода и вывести его вместе с 2 строками до и одной строкой после ```bash $ for i in {1..10} ; do echo $i; done | grep 6 -B2 -A1 ``` ##### Find All Email Addresses in a File using Grep ```bash grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" filename.txt ``` ##### Исключить бинарные файлы из грепа, exclude ```bash grep -InH your-word * ``` #### Grep IP [src](http://website-lab.ru/article/regexp/search-ip-address/) ##### Найти Все IP Адреса с Помощью Grep Пропарсим файл и найдем в нем все IP адреса из диапазона от `0.0.0.0`до `999.999.999.999`с помощью grep: ```bash grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" file.txt ``` ##### Поиск Правильных IPv4 Адресов Регулярное выражение для **поиска и проверки правильных IPv4 адресов**: ```bash grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" file.txt ``` ##### Поиск IPv6 Адресов Регулярное выражение для проверки IPv6 адреса: ``` grep -E -o "((^|:)([0-9a-fA-F]{0,4})){1,8}" file.txt ``` ## Используемые или важные ключи. `--exclude-dir={node_modules,dir1,dir2,dir3}` Исключить папки из рекурсивного поиска. -I -- process a binary file as if it did not contain matching data; -n -- prefix each line of output with the 1-based line number within its input file -H -- print the file name for each match  Просмотр N строк после совпавшей с помощью аргумента -A.  Просмотр N строк перед совпавшей с помощью аргумента -B.  Просмотр N строк до и после совпавшей с помощью аргумента -C. **--color** раскрасить вхождения --color=auto, --color=always, --color=never