我有一个包含以下的文件
String, SomeotherString Additional, StringNew String
我想要以下输出:
String, Someother
String Additional, String
New String
分隔符始终是一个大写字母,后跟一个没有空格的小写字母。我试过了sed 's/([a-z][A-Z])/n1/g <<< String, SomeotherString Additional, StringNew String
但是这导致:
String, Someothe
rString Additional, Strin
gNew String
感谢您的帮助
使用sed:
sed 's/([a-z])([A-Z])/1n2/g'
匹配一个小写字母(子表达式1),后跟一个大写字母(子表达2),并将它们替换为部分匹配子表达式1、换行符和部分匹配子表达2。
前面的应该适用于任何sed。使用GNU sed和其他支持它的工具,您可以使用-E
(在GNU sed中也是-r
)来启用扩展regexp,这样就不必在括号前放反斜杠。
sed -E 's/([a-z])([A-Z])/1n2/g'
至少GNU sed也支持命名字符类,所以你也可以很容易地匹配a-z和a-z以外的其他字母:
sed -E 's/([[:lower:]])([[:upper:]])/1n2/g'
有多种方法可以做到这一点,但这里有一种方法使用perl
echo 'StringSomeotherstringAdditionalString' | perl -pe 's/([A-Z])/n$1/g'
[A-Z]
匹配一个大写字母;n$1
将其替换为换行符和大写字母。