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

问题描述 投票:0回答:3

我想清理一些输入并用可接受的输入替换几个字符,例如丹麦语“

å
”与“
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 sublimetext2 regex-group
3个回答
66
投票

将其拆分为多个

sed
语句,并用
;
:

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

11
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.