如何将指定的模式与多种可能性相匹配

时间:2017-04-27 07:10:37

标签: linux sed

我要求将模式A.*D替换为E.*E。但是我的字符串有多种组合来满足这种模式,比如bAcDAccDAccccD。如果我只是使用正常的方式来替换,我就无法获得预期的结果,即bEcEEccEEccccE

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

如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

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

给定案例的简单解决方法是

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

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