Подтвердить что ты не робот

Регулярное выражение в sed для нескольких замещений в одном выражении

Я хочу дезинфицировать некоторый ввод и заменить несколько символов приемлемым входом, например. датский 'å' с 'aa'.

Это легко сделать с помощью нескольких утверждений, например. /æ/ae/, /å/aa/, /ø/oe/, но из-за ограничений инструмента я хочу иметь возможность сделать это в одном регулярном выражении.

Я могу уловить все соответствующие случаи (/[(æ)(ø)(å)(Æ)(Ø)(Å)]/), но я не могу работать, как хочу (но, возможно, полностью, как предполагалось):

 $ temp="RødgrØd med flæsk"

 $ echo $temp
 RødgrØd med flæsk

 $ echo $temp | sed 's/[(æ)(ø)(å)(Æ)(Ø)(Å)]/(ae)(oe)(aa)(Ae)(Oe)(Aa)/g'
 R(ae)(oe)(aa)(Ae)(Oe)(Aa)dgr(ae)(oe)(aa)(Ae)(Oe)(Aa)d med fl(ae)(oe)(aa)(Ae)(Oe)(Aa)sk

(первая эхо-строка должна показать, что это не проблема кодирования)

Как и в стороне, проблема с инструментом заключается в том, что я хотел бы также использовать одно и то же регулярное выражение в фрагменте Sublime Text 2.

Кто-нибудь может распознать, что не так с моим выражением regex?

Спасибо заранее.

4b9b3361

Ответ 1

Разделите его на несколько операторов sed, разделенных ;:

sed 's/æ/ae/g;s/ø/oe/g;s/å/aa/g;s/Æ/Ae/g;s/Ø/Oe/g;s/Å/Aa/g'

Ответ 2

С

sed -e 's/Find/Replace/g;s/Find/Replace/g;[....];/Find/Replace/g'

вы сделаете трюк.

Итак, переведите то, что вам нужно

sed -e 's/æ/ae/g;s/ø/oe/g;s/å/aa/g;s/Æ/Ae/g;s/Ø/Oe/g;s/Å/Aa/g'

Ответ 3

Это может сработать для вас (GNU sed):

sed -r 's/$/\næaeøoeåaaÆAeØOeÅAa/;:a;s/([æøåÆØÅ])(.*\n.*\1(..))/\3\2/;ta;s/\n.*//' file

Он работает, добавляя таблицу поиска в конец строки, зацикливая до тех пор, пока все ключи не будут заменены, а затем удалит таблицу поиска.