sed中的正则表达式,用于一个语句中的多个替换

时间:2013-01-03 07:59:59

标签: regex sed sublimetext2 regex-group

我想清理一些输入并用可接受的输入替换几个字符,例如丹麦语å'带有'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 snippet中使用相同的正则表达式。

任何人都能辨别出我的正则表达式的错误吗?

提前致谢。

3 个答案:

答案 0 :(得分:53)

将其拆分为多个sed语句,以;分隔:

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

答案 1 :(得分:9)

使用

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'

答案 2 :(得分:3)

这可能适合你(GNU sed):

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

它的工作原理是在行的末尾添加一个查找表,循环直到所有键都被替换,然后删除查找表。