Разница между egrep и grep

У меня вопрос о grep и egrep в unix.

Как я недавно изучал shell commands в unix, я хочу знать, каковы различия между grep и egrep.

Я нахожу, что мы можем использовать grep и egrep с регулярным выражением. Однако я обнаружил что-то другое между этими двумя командами:

Для ^ grep и egrep имеют тот же смысл, что и поиск строк, содержащих данные в самом начале.

Однако, для |, grep, без обратной косой черты перед |, означает характер |, и если я поставлю переднюю косую черту перед ним, это включает особое значение поиска строка содержит либо материал перед ним, либо за ним. НО, для egrep, это наоборот. | имеет последние значения grep, а \| имеет прежнее значение grep при его использовании.

Может кто-нибудь еще объяснить, почему?

Ответ 1

Да, я мог бы.

Команда egrep является ярлыком для двоичного файла grep, но с одним исключением, когда grep вызывается как egrep, двоичный файл grep активирует свою внутреннюю логику, так как он будет называться grep -E.

Какую разницу вы спросите.. и разница в том, что параметр -E позволяет использовать расширенные шаблоны регулярных выражений, это позволит вам использовать такие метасимволы, как +, ? или | ( труба). Они не являются ординальными символами, как мы использовали в словах или именах файлов, но управляем командами для самого бинарного grep. Таким образом, | означает логическое ИЛИ.

Так, например, вы хотите перечислить файлы в каталоге и увидеть только те, которые содержат расширения "mp4" или "avi". С помощью egrep вы выполните:

ls | egrep "mp4|avi"

В этом примере | действует как команда OR, он будет захватывать вывод из ls всех имен, содержащих строки "mp4" или "avi". Если вы запустите его с помощью простой команды grep, вы ничего не получите, потому что grep не знает такой команды, как |, и она будет искать целую текстовую строку "mp4 | avi" (с символом трубы). Например. если у вас есть файл |MPG|cool-guy.q2.stats в вашем каталоге, вы получите его с обычным поиском grep с помощью труб.

Сооо, поэтому вам нужно избежать | в вашей команде egrep для достижения того же эффекта, что и в grep. Escaping отключит специальное значение команды | для двоичного файла grep.

Ответ 2

Команда grep используется для поиска строк, имеющих требуемый парант в файле, у нас есть отдельные метасимволы, поместив '\'

egrep равно grep -E, который является расширенным регулярным выражением, использует {,}, (,), |,? как метасимволы, не давая '\' в выражении

fgrep используется для нахождения фиксированной строки, которая равна grep -F

test.txt
файл
плитка
(Е | т) Ile
(\ F\|\т) Ile

grep "(f | t) ile" test.txt
(Е | т) Ile

grep "(\ f\|\t) ile" test.txt
файл
плитка

egrep "(f | t) ile" test.txt
файл
плитка

egrep "(\ f\|\t) ile" test.txt
(Е | т) Ile

fgrep "(f | t) ile" test.txt
(Е | т) Ile

fgrep "(\ f\|\t) ile" test.txt
(\ F\|\т) Ile