我使用此命令,但它不起作用的广告:
echo "0+223+141+800+450+1*(106+400)+1*(1822+500)+1*(183+400)" | sed 's/*(.*)+/*1suma/g'
这是预期的输出:
0+223+141+800+450+1*(106suma400)+1*(1822suma500)+1*(183suma400)
但这就是我得到的:
0+223+141+800+450+1*(106+400)+1*(1822+500)+1*(183suma400)
尽管使用了g
。
尝试以下内容:
echo "0+223+141+800+450+1*(106+400)+1*(1822+500)+1*(183+400)" |
sed 's/(*([^+]*)+/1suma/g'
产生:
0+223+141+800+450+1*(106suma400)+1*(1822suma500)+1*(183suma400)
诀窍是避免sed
的贪婪匹配,因此表达式[^+]*
代替.*
,以便仅与 Next +
。/p>
请注意,您的尝试不仅替换了您的预期模式的最后出现,但是 - 由于贪婪的匹配 - 仅找到 1 匹配预定的模式,它取代了:
*(.*)+
匹配*(106+400)+1*(1822+500)+1*(183+
-从第一个*
字面到 last +
字面的所有内容,因此捕获组1
因此扩展到(106+400)+1*(1822+500)+1*(183