如何使用shell SED或类似方法拆分行



我有一个包含以下的文件

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将其替换为换行符和大写字母。

相关内容

  • 没有找到相关文章

最新更新