每当有一个小写后跟一个大写字母时,我想要两者之间的换行符。
n
答案 0 :(得分:2)
你很亲密:
sed -E 's/([a-z])([A-Z])/\1\n\2/g'
只需要进行两项更改:
反向引用是使用反斜杠完成的,例如\1
,而不是美元符号。
要启用反向引用,字母需要在parens内部。我为扩展正则表达式(ERE)添加了-E
标志,这样我们就不需要逃避parens了。
例如:
$ echo aZZaB | sed -E 's/([a-z])([A-Z])/\1\n\2/g'
a
ZZa
B
a-z
和A-Z
不是unicode安全的。使用适当的字符类更可靠:
sed -E 's/([[:lower:]])([[:upper:]])/\1\n\2/g'
如果我们不使用-E
,则sed默认为基本正则表达式(BRE)。我们可以使用BRE但我们需要像这样逃避这些:
sed 's/\([[:lower:]]\)\([[:upper:]]\)/\1\n\2/g'