Ответ 1
Разделите его на несколько операторов sed
, разделенных ;
:
sed 's/æ/ae/g;s/ø/oe/g;s/å/aa/g;s/Æ/Ae/g;s/Ø/Oe/g;s/Å/Aa/g'
Я хочу дезинфицировать некоторый ввод и заменить несколько символов приемлемым входом, например. датский 'å
' с '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?
Спасибо заранее.
Разделите его на несколько операторов sed
, разделенных ;
:
sed 's/æ/ae/g;s/ø/oe/g;s/å/aa/g;s/Æ/Ae/g;s/Ø/Oe/g;s/Å/Aa/g'
С
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'
Это может сработать для вас (GNU sed):
sed -r 's/$/\næaeøoeåaaÆAeØOeÅAa/;:a;s/([æøåÆØÅ])(.*\n.*\1(..))/\3\2/;ta;s/\n.*//' file
Он работает, добавляя таблицу поиска в конец строки, зацикливая до тех пор, пока все ключи не будут заменены, а затем удалит таблицу поиска.