Яка різниця між grep, pgrep, egrep, fgrep?


55

Я хотів би пройтися по відмінностям між grep, pgrep, egrepі fgrepта як я хотів би використовувати їх.


1
На це питання вже є хороша відповідь на цьому сайті. unix.stackexchange.com/questions/17949/…
Ali786

А ще є сценарій bash script sgrep :-).
певік

Відповіді:


85

Відмінності між grep, pgrep, egrep та fgrep (Linux):

греп

grep - абревіатура, яка розшифровується як "Друк глобальних регулярних виразів". 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" в чарішній формі означає трактувати шаблон як регулярний вираз. "Розширені регулярні вирази" скорочено "ERE" увімкнено в режимі egrep. задати розширений (який є таким же , як grep -E) лікує +, ?, |, (, і , )як мета-символи.

В основних регулярних виразів (з Grep), мета-символи ?, +, {, |, (, і )втрачають особливий сенс. Якщо ви хочете Grep розглядати ці символи як мета-символи, уникнути їх \?, \+, \{, \|, \(, і \).

Наприклад, тут grep використовує основні регулярні вирази, де плюс трактується буквально, будь-який рядок із плюсом у ньому повертається.

grep "+" myfile.txt

egrep, з іншого боку, трактує "+" як мета-символ і повертає кожен рядок, оскільки плюс інтерпретується як "один або кілька разів".

egrep "+" myfile.txt

Тут повертається кожен рядок, оскільки +egrep трактувався як мета-символ. нормальний греп шукав би лише рядки з літералом +.

fgrep

fgrep - абревіатура, що розшифровується як "Друк глобальних регулярних виразів виправлень".

fgrep (що таке саме як grep -F) є фіксованим або швидким grep і поводиться як grep, але НЕ визнає жодних мета-символів регулярних виразів спеціальними. Пошук завершиться швидше, оскільки він обробляє лише простий рядок, а не складний шаблон.

Наприклад, якщо я хотів шукати мій .bash_profile за буквальною точкою (.), То використовувати grep було б важко, тому що мені довелося б уникнути крапки, тому що крапка - це мета-символ, що означає "wild-card, будь-який єдиний символ":

grep "." myfile.txt

Наведена вище команда повертає кожен рядок myfile.txt. Зробіть це замість цього:

fgrep "." myfile.txt

Тоді лише рядки, які мають буквальне значення '.' в них повертаються. fgrep допомагає нам не турбуватися, уникаючи наших мета-персонажів.

pgrep

pgrep - абревіатура, що розшифровується як "Друк глобальних регулярних виразів процесів".

pgrep переглядає поточно запущені процеси та перелічує ідентифікатори процесу, які відповідають критеріям вибору для stdout. pgrep зручний, коли все, що ви хочете знати, це ціле число id процесу. Наприклад, якби я хотів знати лише ідентифікатор процесу мого mysql процесу, я використовував би команду, pgrep mysqlяка повертала б ідентифікатор процесу на зразок 7312.


З pgrepпосібника : ім'я процесу, яке використовується для узгодження, обмежується 15 символами, що знаходяться у висновку / proc / pid / stat . Використовуйте параметр -f, щоб відповідати повному командному рядку / proc / pid / cmdline .
Пабло А
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.