Я хотів би пройтися по відмінностям між grep
, pgrep
, egrep
і fgrep
та як я хотів би використовувати їх.
Я хотів би пройтися по відмінностям між grep
, pgrep
, egrep
і fgrep
та як я хотів би використовувати їх.
Відповіді:
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 (що таке саме як grep -F) є фіксованим або швидким grep і поводиться як grep, але НЕ визнає жодних мета-символів регулярних виразів спеціальними. Пошук завершиться швидше, оскільки він обробляє лише простий рядок, а не складний шаблон.
Наприклад, якщо я хотів шукати мій .bash_profile за буквальною точкою (.), То використовувати grep було б важко, тому що мені довелося б уникнути крапки, тому що крапка - це мета-символ, що означає "wild-card, будь-який єдиний символ":
grep "." myfile.txt
Наведена вище команда повертає кожен рядок myfile.txt. Зробіть це замість цього:
fgrep "." myfile.txt
Тоді лише рядки, які мають буквальне значення '.' в них повертаються. fgrep допомагає нам не турбуватися, уникаючи наших мета-персонажів.
pgrep - абревіатура, що розшифровується як "Друк глобальних регулярних виразів процесів".
pgrep переглядає поточно запущені процеси та перелічує ідентифікатори процесу, які відповідають критеріям вибору для stdout. pgrep зручний, коли все, що ви хочете знати, це ціле число id процесу. Наприклад, якби я хотів знати лише ідентифікатор процесу мого mysql процесу, я використовував би команду, pgrep mysql
яка повертала б ідентифікатор процесу на зразок 7312.
pgrep
посібника : ім'я процесу, яке використовується для узгодження, обмежується 15 символами, що знаходяться у висновку / proc / pid / stat . Використовуйте параметр -f, щоб відповідати повному командному рядку / proc / pid / cmdline .