2009-04-29 6 views
1

Я бегу следующий codeуниверсализации и группировка вопроса в регулярном выражении в SED

sed 's/\([^ ]+\) your \([^ ]+\)/ \2\1er/' < fail 

Файл строя является

fail your test 

Эта команда дает мне

fail your test 

хотя он должен дать «testfailer».

Второй и первый глобусы \2\1 должны быть в начале слова «er». Это говорит о том, что проблема может возникать в регулярных выражениях в части поиска. Однако они кажутся мне верными.

Вы видите ошибку в коде?

ответ

4

Ваш код работает когда вы избегаете знаков плюс:

sed 's/\([^ ]\+\) your \([^ ]\+\)/\2\1er/' < fail 
+1

А, я вижу сейчас. + и() считаются расширенными функциями регулярного выражения, поэтому вы включаете их в «базовый» режим, обращая их обратно. Хорошо знать. – chaos

+0

Я не получил код для работы в OSX Leopard. –

+0

@Stephan: Ваш код работает в Ubuntu. –

5

общий или садовый разновидность sed regex не понимает +. Да, я знаю, насколько глупо это. Таким образом, это эквивалентно, рабочая версия командной строки:

sed 's/\([^ ][^ ]*\) your \([^ ][^ ]*\)/ \2\1er/' < fail 

работает также запросить расширенный регулярное выражение, в этом случае вы канаву обратный слэш на круглые скобки:

sed -r 's/([^ ]+) your ([^ ]+)/ \2\1er/' < fail 
+0

Будет ли функционировать квантор {1,}? – Tomalak

+2

Работает в основном регулярном выражении, если вы обратном скроете фигурные скобки, в расширенном регулярном выражении, если вы этого не сделаете. – chaos

+1

Обратное сбрасывание + в базовом режиме - это меньше усилий. :) – chaos

 Смежные вопросы

  • Нет связанных вопросов^_^