2015-10-27 7 views
3

Может кто-нибудь объяснить, почемуна месте ссылочность с СЭД

sed -re 's/(e)\1{2,}/ee/g' filename 

выходы (по желанию)

Jeep 

Но

sed -ire 's/(e)\1{2,}/ee/g' filename 

дает мне

sed: -e expression #1, char 16: Invalid back reference 

Я пробовал возиться и укладывать скобки в разных местах, но я не уверен, что еще делать.

+0

Это очень любопытно. Я вижу похожую ошибку во FreeBSD, которая полностью использует другое sed. Мое предположение заключается в том, что нечувствительность к регистру не выполняется, предполагая, что каждая буква представляет собой набор обоих случаев этой буквы и что обратная ссылка просто не знает, что искать. Вы увидите, что 'sed -re 's/([Ee]) \ 1 {2,}/ee/g'' отлично работает. Возможно, вы можете реорганизовать ваш сценарий sed вручную. – ghoti

+0

Можете ли вы дать больше информации об общей проблеме, которую вы пытаетесь решить, или это вопрос чисто академический? – ghoti

+0

Ваш пример может быть сведен к просто '' s/eee */ee/g'' – tripleee

ответ

4

Потому что -ire указывает re как аргумент -i, а не как опции для sed.

Задать -i как отдельный индивидуальный вариант работает нормально.

sed -i -re 's/(e)\1{2,}/ee/g' file