在小写和大写字母之间插入换行符

时间:2016-07-07 20:49:56

标签: sed

每当有一个小写后跟一个大写字母时,我想要两者之间的换行符。

n

1 个答案:

答案 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-zA-Z不是unicode安全的。使用适当的字符类更可靠:

sed -E 's/([[:lower:]])([[:upper:]])/\1\n\2/g'

替代

如果我们不使用-E,则sed默认为基本正则表达式(BRE)。我们可以使用BRE但我们需要像这样逃避这些:

sed 's/\([[:lower:]]\)\([[:upper:]]\)/\1\n\2/g'