help - sed - 在任何形式的XxxXxx字符串之间插入空格,而不替换模式

如果字符串的格式为XxxXyzAbc ... 来自sed的预期出局必须是Xxx Xyz Abc ...... 例如:如果字符串是QcfEfQfs,那么预期的输出是Qcf Ef Efs。 如果我试图用空格替换模式[a-z] [A-Z],那么sed将用空格替换字符或模式,如Qc f fs。 有没有办法在不更换模式的情况下插入空间? 请帮助。谢谢。     
已邀请:
使用匹配组。
$ sed 's/([a-z])([A-Z])/1 2/g' <<< 'XxxXyzAbc'
Xxx Xyz Abc
    
更精确的模式匹配 - 在XxxYyyZzz格式的字符串上具有较少虚假匹配的模式匹配 - 是:
sed 's/([A-Z][a-z][a-z]*)([A-Z][a-z][a-z]*)([A-Z][a-z][a-z]*)/1 2 3/'
考虑输入:
XxxYyyZzz
xxxYyyZzz
X xY yZ z
我看到的另一个答案是在所有字符串中插入空格 - 它应该只修改第一个字符串。 更新以允许
QcfEfEfs
示例 - 从问题中不清楚允许连续多少个小写字母。它可能是1或2;或者它可以是1或更多 - 使用
*
允许1或更多;否则,使用
{1,2}
为1或2。     
这可能适合你(GNU sed):
sed 's/B[[:upper:]]/ &/g' file
查找非单词边界,后跟大写字符,并在整个行中插入空格。     

要回复问题请先登录注册