【发布时间】:2020-02-11 05:03:25
【问题描述】:
我有一个将这样编写的函数名称转换为函数名称的任务:function_name() 到 camelCase。有一些限制:
- 不要转换包含大写字符的函数
- 不要转换带有两个下划线的部分函数 (two__underscores())
我认为 sed 命令效果很好,除了它在下划线之间的单个数字上失败:
命令:
sed -re '/[A-Z]+/!s/([0-9a-z])(_)([a-z0-9])/\1\u\3/g'
它的作用:
- this_is_simple() -> thisIsSimple()
- this_is_2_simple() -> thisIs2_simple()
- this_is_22_simple() -> thisIs22Simple()
问题是第二个例子。为什么它在单个数字上失败,而不是在更多数字上失败?我尝试使用 [[:digit:]] 并将 ([0-9a-z]) 替换为 ([a-z0-9]|[[:digit:]]) 。它们的工作方式相同。
提前谢谢你。
【问题讨论】:
-
好的,我明白了,非常感谢。但我仍然不知道如何纠正它。你有什么建议吗?
-
因为在
22的情况下,第一个2匹配上一场比赛的最后一组,而下一个2匹配下一场比赛的第一组。而在单个2情况下,第一个匹配this_is_2被消耗,其余的_simple()不匹配任何内容。编号并不特殊,例如。this_is_a_simple也会失败,任何只有一个字符的东西。
标签: bash shell sed replace scripting