Я пытаюсь понять разницу между grep -e
и grep -E
. Теперь из grep manpage
я получил:
-E, --extended-regexp
Интерпретировать PATTERN как расширенное регулярное выражение (см. Ниже).
-e PATTERN, --regexp = PATTERN
Используйте PATTERN в качестве шаблона; полезно для защиты шаблонов, начинающихся с -
Приведенное выше объяснение не имеет смысла для меня.
Итак, кто-то может объяснить мне, используя examples
разницу между этими двумя вариантами и когда использовать какой вариант.
PS: Версия: grep (GNU grep) 2.10
-e
самом деле является просто устранение неоднозначности, когда регулярное выражение начинается с тире. Так чтоgrep ---foo
дает,unrecognized option: ---foo
но вы можете сказать,grep -e ---foo
чтобы grep для регулярного выражения---foo
.Ответы:
-e
является строго флагом для указания шаблона, с которым вы хотите сопоставить.-E
контролирует необходимость экранирования определенных специальных символов.man grep
объясняет-E
это немного больше:источник
echo "hello" | grep -o -e 'h|l'
получаю вывод, потому что|
потерял свое особое значение, а когдаecho "hello" | grep -o -E 'h|l'
я получаю желаемый вывод.echo "hello" | grep -o -e 'h' -e 'l'
будет работать, если вы хотите сбросить-E
в этом случае.grep -e -o 'h|l'
будет совпадать буквально, вh|l
то время какgrep -e -o 'h\|l'
будет совпадатьh
илиl
и с -E это наоборотТакже
grep -e
позволяет использовать несколько строк для поиска:'grep -e 'abc' -e 'def' -e '123'
будет искать все три строки:abc
а такжеdef
и123
.Это работает очень похоже на ,
grep 'abc\|def\|123'
где\|
стоит за ,or
но может быть немного более читаемым.Поскольку наиболее важные факты
grep -E
уже объяснены здесь, я просто хочу добавить то, что я подытожил по этой теме, по довольно похожему вопросу: Регулярное выражение для поиска двойных символов в Bashисточник
/ продлен
Итак, еще раз.
источник
(
,)
и|
т. д., должны быть экранированы обратным слешем, чтобы иметь свое особое значение в базовом регулярном выражении, но не в расширенном (где они должны быть экранированы, чтобы обрабатываться как строковый литерал)Просто чтобы уточнить
-e
вариант.-e
часто необязательно:идентично
если, как указано в предыдущем Ответе и на страницах руководства, не существует нескольких шаблонов поиска или для защиты шаблона, начинающегося с дефиса (-).
источник