Я хотел бы пройтись по различиям между grep
, pgrep
, egrep
и fgrep
и как я хотел бы использовать их.
linux
command-line
grep
Эрик Лещинский
источник
источник
Ответы:
Различия между grep, pgrep, egrep и fgrep (Linux):
Grep
grep - это аббревиатура, которая расшифровывается как «Global Regular Expressions Print». grep - это программа, которая сканирует указанный файл или файлы построчно, возвращая строки, содержащие шаблон. Шаблон - это выражение, которое определяет набор строк путем интерпретации символов как метасимволов. Например, метасимвол звездочки (*) интерпретируется как означающий «ноль или более предшествующего элемента». Это позволяет пользователям вводить короткие последовательности символов и метасимволов в команду grep, чтобы компьютер показывал нам, какие строки в каких файлах совпадают.
Стандартная команда grep выглядит так:
grep выводит результаты поиска на экран (stdout) и возвращает следующие выходные значения:
Некоторые общие флаги:
-c
для подсчета количества успешных совпадений и не распечатывания фактических совпадений,-i
для того , чтобы сделать поиск нечувствительным-n
к регистру, печатать номер строки перед каждой распечаткой совпадения,-v
чтобы взять дополнение регулярного выражения (т.е. вернуть строки, которые не совпадают), и-l
печатать имена файлов с линиями, которые соответствуют выражению.задать расширенное
egrep - это сокращение, которое расшифровывается как «Extended Global Regular Expressions Print».
Буква «E» в egrep означает, что шаблон рассматривается как регулярное выражение. «Расширенные регулярные выражения», сокращенно «ERE», включены в egrep. задать расширенный (который является таким же , как
grep -E
) лечит+
,?
,|
,(
, и ,)
как мета-символы.В основных регулярных выражений (с Grep), мета-символы
?
,+
,{
,|
,(
, и)
теряют особый смысл. Если вы хотите Grep рассматривать эти символы как мета-символы, избежать их\?
,\+
,\{
,\|
,\(
, и\)
.Например, здесь grep использует базовые регулярные выражения, где плюс обрабатывается буквально, возвращается любая строка с плюсом.
egrep, с другой стороны, обрабатывает «+» как метасимвол и возвращает каждую строку, потому что «плюс» интерпретируется как «один или несколько раз».
Здесь каждая строка возвращается, потому что
+
egrep был обработан как метасимвол. обычный grep искал бы только строки с литералом+
.fgrep
fgrep - это аббревиатура, обозначающая «Печать глобальных регулярных выражений с фиксированной строкой».
fgrep (то же самое, что и grep -F) является фиксированным или быстрым grep и ведет себя как grep, но НЕ распознает мета-символы регулярных выражений как специальные. Поиск завершится быстрее, потому что он обрабатывает только простую строку, а не сложный шаблон.
Например, если бы я хотел найти в моем .bash_profile литеральную точку (.), Тогда было бы сложно использовать grep, потому что мне пришлось бы избегать точки, потому что точка - это метасимвол, который означает «подстановочный знак, любой отдельный символ»:
Приведенная выше команда возвращает каждую строку myfile.txt. Сделайте это вместо этого:
Тогда только строки, которые имеют буквальный «.» в них возвращаются. fgrep помогает нам не убегать от мета-символов.
pgrep
pgrep - это аббревиатура, обозначающая «Печать глобальных регулярных выражений Process-ID».
pgrep просматривает запущенные в данный момент процессы и перечисляет идентификаторы процессов, которые соответствуют критериям выбора для stdout. pgrep удобен, когда все, что вы хотите знать - это целое число процесса. Например, если бы я хотел знать только идентификатор процесса моего процесса mysql, я бы использовал команду,
pgrep mysql
которая возвращала бы идентификатор процесса, например 7312.источник
pgrep
руководства : имя процесса, используемого для сопоставления, ограничено 15 символами, присутствующими в выходных данных / proc / pid / stat . Используйте параметр -f для сопоставления с полной командной строкой / proc / pid / cmdline .