2017-04-27 42 views
1

我有一个请求,用E.*E替换模式A.*D。然而我的字符串有多种组合来满足这种模式,如bAcDAccDAccccD。如果我只是用正常的方式来替换,我不能得到我的预期结果,即,bEcEEccEEccccE如何匹配具有多种可能性的指定模式

echo 'bAcDAccDAccccD'|sed 's/A\(.*\)D/E\1E/g' - >bEcDAccDAccccE

如何解决这样的问题?

回答

4

*是贪婪量词(见Greedy vs. Reluctant vs. Possessive Quantifiers)。它会尝试尽可能

对于给定的情况下,一个简单的解决方法是

$ echo 'bAcDAccDAccccD' | sed 's/A\([^D]*\)D/E\1E/g' 
bEcEEccEEccccE 

[^D]*只会匹配非D字符匹配,而.*将匹配任何字符,包括D