Глобирование и группировка вопроса в регулярном выражении в sed - PullRequest
1 голос
/ 29 апреля 2009

Я запускаю следующий код

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

Ошибка файла

fail your test

Приведенная выше команда дает мне

fail your test

хотя это должно дать "testfailer".

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

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

Ответы [ 2 ]

5 голосов
/ 29 апреля 2009

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

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

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

sed -r 's/([^ ]+) your ([^ ]+)/ \2\1er/' < fail
4 голосов
/ 29 апреля 2009

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

sed 's/\([^ ]\+\) your \([^ ]\+\)/\2\1er/' < fail
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...