Я хотел бы познакомиться с различиями между grep
, pgrep
, egrep
и fgrep
и их использованием.
1 ответ
Различия между grep, pgrep, egrep и fgrep (Linux):
Grep
grep это аббревиатура, которая расшифровывается как "Global Regular Expressions Print". grep - это программа, которая сканирует указанный файл или файлы построчно, возвращая строки, содержащие шаблон. Шаблон - это выражение, которое определяет набор строк путем интерпретации символов как метасимволов. Например, метасимвол звездочки (*) интерпретируется как означающий "ноль или более предшествующего элемента". Это позволяет пользователям вводить короткие последовательности символов и метасимволов в команду grep, чтобы компьютер показывал нам, какие строки в каких файлах совпадают.
Стандартная команда grep выглядит так:
grep <flags> '<regular expression>' <filename>
grep выводит результаты поиска на экран (stdout) и возвращает следующие выходные значения:
0 A match was found.
1 No match was found.
>1 A syntax error was found or a file was inaccessible
(even if matches were found).
Вот некоторые общие флаги: -c
для подсчета количества успешных совпадений и отсутствия распечатки фактических совпадений, -i
чтобы сделать регистр поиска нечувствительным, -n
для вывода номера строки перед каждой распечаткой совпадения, -v
для получения дополнения к регулярное выражение (т.е. возвращает строки, которые не совпадают), и -l
для печати имен файлов файлов со строками, которые соответствуют выражению.
задать расширенное
egrep - это сокращение, которое расшифровывается как "Расширенная печать глобальных регулярных выражений".
Буква "E" в egrep означает, что шаблон рассматривается как регулярное выражение. "Расширенные регулярные выражения", сокращенно "ERE", включены в egrep. egrep (то же самое, что grep -E
) лечит +
?
, |
, (
, и )
как метасимволы.
В основных регулярных выражениях (с grep) метасимволы ?
, +
, {
, |
, (
, и )
теряют свое особое значение. Если вы хотите, чтобы grep рассматривал эти символы как метасимволы, экранируйте их \?
, \+
, \{
, \|
, \(
и \)
.
Например, здесь grep использует базовые регулярные выражения, где плюс обрабатывается буквально, возвращается любая строка с плюсом.
grep "+" myfile.txt
egrep, с другой стороны, обрабатывает «+» как метасимвол и возвращает каждую строку, потому что плюс интерпретируется как "один или несколько раз".
egrep "+" myfile.txt
Здесь каждая строка возвращается , потому что +
лечились как задать расширенную мету характера. обычный grep искал бы только строки с литералом +
.
fgrep
fgrep - это аббревиатура, обозначающая «Печать глобальных регулярных выражений с фиксированной строкой».
fgrep (то же самое, что и grep -F) является фиксированным или быстрым grep и ведет себя как grep, но НЕ распознает мета-символы регулярных выражений как специальные. Поиск завершится быстрее, потому что он обрабатывает только простую строку, а не сложный шаблон.
Например, если бы я хотел найти в моем .bash_profile литеральную точку (.), Тогда было бы сложно использовать grep, потому что мне пришлось бы избегать точки, потому что точка - это метасимвол, который означает «подстановочный знак, любой отдельный символ»:
grep "." myfile.txt
Приведенная выше команда возвращает каждую строку myfile.txt. Сделайте это вместо этого:
fgrep "." myfile.txt
Тогда только строки, которые имеют буквальный «.» в них возвращаются. fgrep помогает нам не убегать от мета-символов.
pgrep
pgrep - это аббревиатура, обозначающая «Печать глобальных регулярных выражений Process-ID».
pgrep просматривает запущенные в данный момент процессы и перечисляет идентификаторы процессов, которые соответствуют критериям выбора для stdout. pgrep удобен, когда все, что вы хотите знать - это целое число процесса. Например, если бы я хотел знать только идентификатор процесса моего процесса mysql, я бы использовал команду pgrep mysql
которая возвращала бы идентификатор процесса, например 7312.