如果字符串的格式为 XxxXyzAbc ...
来自sed的预期出局必须是 Xxx Xyz Abc ......
例如:如果字符串为 QcfEfQfs ,则预期输出为 Qcf Ef Efs。
如果我尝试用空格替换 [az] [AZ] 模式,那么sed会用空格替换字符或模式,例如 Qc f fs。 < / p>
有没有办法在不更换图案的情况下插入空间?
请帮助。谢谢。
答案 0 :(得分:6)
使用匹配组。
$ sed 's/\([a-z]\)\([A-Z]\)/\1 \2/g' <<< 'XxxXyzAbc'
Xxx Xyz Abc
答案 1 :(得分:0)
更准确的模式匹配 - 对于不是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。
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed 's/\B[[:upper:]]/ &/g' file
查找非单词边界,后跟大写字符,并在整个行中插入空格。