в чем разница между `grep`,` egrep` и `fgrep`?

<p>может кто-нибудь сказать мне технические различия между <code>grep</code>, <code>egrep</code> и <code>fgrep</code> и предоставить подходящие примеры?</p><p>когда мне нужно использовать <code>grep</code> over <code>egrep</code> и наоборот?</p>

<ul> <li><code>egrep</code> на 100% эквивалентно <a href="https://www.gnu.org/software/grep/manual/grep.html#index-matching-extended-regular-expressions"><code>grep -e</code></a> </li> <li><code>fgrep</code> на 100% эквивалентно <a href="https://www.gnu.org/software/grep/manual/grep.html#index-matching-fixed-strings"><code>grep -f</code></a> </li> </ul><p>исторически эти переключатели были предоставлены в отдельных двоичных файлах. в некоторых действительно старых системах unix вы обнаружите, что вам нужно вызывать отдельные двоичные файлы, но во всех современных системах предпочтительнее использовать коммутаторы. страница man для grep содержит подробности об этом.</p><p>что касается того, что они делают, <code>-e</code> переключает grep в специальный режим, чтобы выражение оценивалось как ere (расширенное регулярное выражение), а не как его обычное сопоставление с образцом. детали этого синтаксиса находятся на странице руководства.</p><blockquote> <p><code>-e, --extended-regexp</code><br> интерпретировать pattern как расширенное регулярное выражение</p> </blockquote><p>переключатель <code>-f</code> переключает grep в другой режим, где он принимает шаблон для сопоставления, но затем разбивает этот шаблон на одну строку поиска в строке и выполняет поиск or на любой из строк без какого-либо специального сопоставления с образцом.</p><blockquote> <p><code>-f, --fixed-strings</code><br> интерпретировать pattern как список фиксированных строк, разделенных символами новой строки, любой из которых должен соответствовать.</p> </blockquote><p>вот несколько примеров сценариев:</p><ul> <li> <p>у вас есть файл со списком, скажем, десяти имен пользователей unix в виде простого текста. вы хотите найти файл группы на своем компьютере, чтобы увидеть, входит ли кто-либо из десяти перечисленных пользователей в какие-либо специальные группы:</p> <pre><code>grep -f -f user\_list.txt /etc/group </code></pre> <p>причина, по которой здесь помогает переключатель <code>-f</code>, заключается в том, что имена пользователей в файле шаблона интерпретируются как строки простого текста. например, точки будут интерпретироваться как точки, а не как символы подстановки.</p> </li> <li> <p>вы хотите искать, используя причудливое выражение. например, скобка <code>()</code> может использоваться для обозначения групп с <code>|</code>, используемым в качестве оператора or. вы можете запустить этот поиск, используя <code>-e</code>:</p> <pre><code>grep -e '^no(fork|group)' /etc/group </code></pre> <p>... чтобы вернуть строки, которые начинаются с "nofork" или "nogroup". без переключателя <code>-e</code> вам пришлось бы избегать задействованных специальных символов, потому что при обычном сопоставлении с образцом они просто искали бы этот точный шаблон;</p> <pre><code>grep '^no\(fork\|group\)' /etc/group </code></pre></li> </ul>

<p>от <code>man grep</code>:</p><pre> egrep - то же, что grep -e. fgrep - то же самое, что и grep -f. прямой вызов как egrep или fgrep устарел, но предоставляется для того, чтобы исторические приложения , которые полагаются на них, работали без изменений. </pre><p>вы используете <code>fgrep</code> или <code>grep -f</code> если вы <em>не</em> хотите, чтобы скопированная строка интерпретировалась как шаблон.</p><p>вы используете <code>egrep</code> или <code>grep -e</code> если вам нужно использовать расширенное регулярное выражение.</p>

<p><code>egrep</code> и <code>fgrep</code> в основном эквивалентны <code>grep -e</code> а также <code>grep -f</code> (соответственно):</p><pre class="lang-none prettyprint-override"><code> -e, --extended-regexp interpret pattern as an extended regular expression (ere, see below). (-e is specified by posix.) -f, --fixed-strings interpret pattern as a list of fixed strings, separated by newlines, any of which is to be matched. (-f is specified by posix.) </code></pre><p>сообщения об ошибках могут отличаться.</p>

<p>от "man grep":</p><blockquote> <p>доступны три варианта программы egrep, fgrep и rgrep. egrep такой же, как grep -e. fgrep - это то же самое, что и grep -f. rgrep - это то же самое, что и grep -r. прямой вызов egrep или fgrep устарел, но предоставляется, чтобы позволить историческим приложениям, которые полагаются на них, работать без изменений.</p> </blockquote>