我要求将模式A.*D
替换为E.*E
。但是我的字符串有多种组合来满足这种模式,比如bAcDAccDAccccD
。如果我只是使用正常的方式来替换,我就无法获得预期的结果,即bEcEEccEEccccE
:
echo 'bAcDAccDAccccD'|sed 's/A\(.*\)D/E\1E/g'
- > bEcDAccDAccccE
。
如何解决这个问题?
答案 0 :(得分:4)
*
是贪婪量词(见Greedy vs. Reluctant vs. Possessive Quantifiers)。它将尝试尽可能匹配
给定案例的简单解决方法是
$ echo 'bAcDAccDAccccD' | sed 's/A\([^D]*\)D/E\1E/g'
bEcEEccEEccccE
[^D]*
仅匹配非D
个字符,而.*
将匹配任何字符,包括D