Из различных инструментов Unix два используют BRE в качестве диалекта регулярных выражений по умолчанию.Этими двумя инструментами являются sed
и grep
.
. В большинстве операционных систем вы можете использовать egrep
или grep -E
, чтобы указать этому инструменту использовать ERE в качестве своего диалекта.Меньшее (но все же значительное) число реализаций sed
примет опцию -E
для использования ERE.
В режиме BRE, однако, вы все равно можете создавать атомы в скобках.И вы делаете это, избегая скобок.Вот почему ваше первоначальное выражение терпит неудачу - круглые скобки по умолчанию НЕ являются специальными в BRE, но вы делаете их особенными, поставив перед символами обратную косую черту.
Также следует помнить, что если вы хотите, чтобы sed
выполнял скрипт из аргумента командной строки, вы должны использовать опцию -e
.
Итак:
$ cat ph.txt
+1(212)xxx-xxxx
1(212)xxx-xxxx
212-xxx-xxxx
$ grep '^+\{0,1\}1([0-9]\{3\})' ph.txt
+1(212)xxx-xxxx
1(212)xxx-xxxx
$ egrep '^[+]?1\([0-9]{3}\)' ph.txt
+1(212)xxx-xxxx
1(212)xxx-xxxx
$ sed -n -e '/^+\{0,1\}1([0-9]\{3\})/p' ph.txt
+1(212)xxx-xxxx
1(212)xxx-xxxx
$ sed -E -n -e '/^[+]?1\([0-9]{3}\)/p' ph.txt
+1(212)xxx-xxxx
1(212)xxx-xxxx
В зависимости от вашей ОС, вы можете получить полный список того, как это работает, с man re_format
.