Если это не работает в вашем .bashrc
, убедитесь, что указанное .bashrc
было действительно вызвано в вашей активной оболочке; например, запустите alias
и убедитесь, что указанный псевдоним указан.
То, что это не проблема с псевдонимом в целом, или с Grep, легко показать:
$ alias grep='grep -E'
$ echo 'foo' | grep 'fo+'
foo
$ unalias grep
$ echo 'foo' | grep 'fo+'
$
Таким образом, это проблема с вашим составляют скрытые; ничего не зная о них, мы не можем вам помочь. (Тем не менее, вы можете убедиться, что ваш .bash_profile
источник вашего .bashrc
).
Теперь более интересный вопрос, который вы просили это почему ERE отключена по умолчанию, и что последствия изменения, которые были бы.
См стандарт POSIX руководящих grep
:
Утилита Grep будет искать входные файлы, выбирая строки, соответствующие один или несколько шаблонов; типы шаблонов контролируются указанными опциями. Шаблоны задаются параметром -e, -f или операндом pattern_list. Значение pattern_list должно состоять из одного или нескольких шаблонов, разделенных <newline> s; содержимое шаблона_файла должно состоять из одного или нескольких шаблонов, заканчивающихся номером <newline>. По умолчанию входная строка выбирается, если любой шаблон, рассматриваемый как общее базовое регулярное выражение (BRE), как описано в томе базовых определений IEEE Std 1003.1-2001, раздел 9.3, «Основные регулярные выражения», соответствует любой части строка, исключающая завершение; нулевой BRE должен соответствовать каждой строке. По умолчанию каждая выбранная строка ввода должна быть записана на стандартный вывод.
Таким образом: Любая версия grep, для которой по умолчанию не были BRE, несовместима с стандартом POSIX.
Это сломает некоторые запросы; например:
grep -e '(foo)' in.txt
... ищет буквальной скобку в файле ввод. Если интерпретироваться как ERE, он будет рассматривать parens как операторы группировки, тем самым сопоставляя строки, которые оригинальный автор вышеприведенного кода не намеревался.
Если '' grep' включен -E' по умолчанию, это было бы несовместимо со стандартом POSIX, который требует поддержки BRE по умолчанию. –
... что за что-то работает или не работает в вашем .bashrc, это зависит от того, как ваш .bashrc вызывается из других dotfiles; это не то, от чего мы можем ответить здесь более подробно. –
Попробуйте запустить 'alias'; посмотрите, существует ли там псевдоним. Если это не так, запустите '. ~/.bashrc', и посмотрите, исправляет ли он это. Если это так, то проблема является чем-то специфичным для ваших dotfiles вашей операционной системы; если вы не изменили их значительно по сравнению с предоставленными поставщиком стандартами по умолчанию, вы можете задать вопрос, помеченный вашей конкретной ОС, на http://superuser.com/, если это так, и вы уже не можете найти что-то на месте , –