1
我有一个请求,用E.*E
替换模式A.*D
。然而我的字符串有多种组合来满足这种模式,如bAcDAccDAccccD
。如果我只是用正常的方式来替换,我不能得到我的预期结果,即,bEcEEccEEccccE
:如何匹配具有多种可能性的指定模式
echo 'bAcDAccDAccccD'|sed 's/A\(.*\)D/E\1E/g'
- >bEcDAccDAccccE
。
如何解决这样的问题?
我有一个请求,用E.*E
替换模式A.*D
。然而我的字符串有多种组合来满足这种模式,如bAcDAccDAccccD
。如果我只是用正常的方式来替换,我不能得到我的预期结果,即,bEcEEccEEccccE
:如何匹配具有多种可能性的指定模式
echo 'bAcDAccDAccccD'|sed 's/A\(.*\)D/E\1E/g'
- >bEcDAccDAccccE
。
如何解决这样的问题?
*
是贪婪量词(见Greedy vs. Reluctant vs. Possessive Quantifiers)。它会尝试尽可能
对于给定的情况下,一个简单的解决方法是
$ echo 'bAcDAccDAccccD' | sed 's/A\([^D]*\)D/E\1E/g'
bEcEEccEEccccE
[^D]*
只会匹配非D
字符匹配,而.*
将匹配任何字符,包括D