如何使用Shell SED等工具按小写接大写规则拆分文本行
问题根因
你之前的sed命令错误点在于:捕获组把「小写字母+紧跟的大写字母」两个字符作为整体匹配,替换时将这两个字符整体放到换行符之后,导致拆分点前的小写字母被错误带到下一行开头,最终把单词拆碎,出现Someothe/rString这类不符合预期的输出。
正确实现命令
GNU sed(绝大多数Linux发行版默认sed版本)
直接执行以下命令即可得到预期结果:
sed 's/\([a-z]\)\([A-Z]\)/\1\n\2/g' <<< "String, SomeotherString Additional, StringNew String"
正则逻辑说明:
- 将匹配规则拆为两个独立捕获组:第一个捕获组匹配拆分点前的小写字母,第二个捕获组匹配拆分点后的大写字母
- 替换时完整保留两个捕获组的原有内容,仅在两组中间插入换行符,不会丢失、错位任何原文本字符
执行输出和需求完全匹配:
String, Someother String Additional, String New String
BSD sed(macOS系统默认自带sed版本)
BSD sed对换行符的转义规则和GNU sed有区别,需要使用以下命令:
sed 's/\([a-z]\)\([A-Z]\)/\1\'$'\n''\2/g' <<< "String, SomeotherString Additional, StringNew String"
内容的提问来源于stack exchange,提问作者Reubens
相关产品推荐
相关产品推荐

