36

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

谁能看出我的正则表达式有什么问题?

提前致谢。

4

3 回答 3

61

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

sed 's/æ/ae/g;s/ø/oe/g;s/å/aa/g;s/Æ/Ae/g;s/Ø/Oe/g;s/Å/Aa/g'
于 2013-01-03T08:03:40.553 回答
10

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'
于 2013-01-03T08:04:09.683 回答
3

这可能对您有用(GNU sed):

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

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

于 2013-01-03T09:29:52.197 回答