我想清理一些输入并用可接受的输入替换几个字符,例如丹麦语“
å
”与“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 片段中使用相同的正则表达式。
有人能够辨别出我的正则表达式语句有什么问题吗?
提前致谢。
将其拆分为多个
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
它的工作原理是在行尾添加一个查找表,循环直到所有键都被替换,然后删除查找表。