Ответ 1
Стандарт sed
понимает только POSIX Основные регулярные выражения (BRE), а не расширенные регулярные выражения (ERE), а ?
- метасимвол в ERE, но не в BRE.
Ваша версия sed
может поддерживать ERE, если вы включите их. С GNU sed
соответствующими параметрами являются -r
и --regexp-extended
, описанные как "использовать расширенные регулярные выражения в script".
Однако, если ваш sed
не поддерживает его - вполне правдоподобный - тогда вы застряли. Либо импортируйте версию sed
, которая их поддерживает, либо перепроектируйте вашу обработку. Возможно, вам следует использовать awk
.
2014-02-21
Не знаю, почему я не упоминал, что даже если sed
не поддерживает сокращенную обозначение ?
или \?
, она поддерживает подсчитанные диапазоны с \{n,m\}
, поэтому вы можете имитировать ?
с \{0,1\}
:
sed -n '/\(www\.\)\{0,1\}teste/p' << EOF
http://www.tested.com/
http://tested.com/
http://www.teased.com/
EOF
который производит:
http://www.tested.com/
http://tested.com/
Протестировано на Mac OS X 10.9.1 Mavericks со стандартным BSD sed
и с GNU sed
4.2.2.