我有一个转换将这样编写的函数名转换为:function_name()到camelCase。有一些限制:
我认为sed命令效果很好,除了下划线之间的一位数字失败:
命令:
sed -re '/[A-Z]+/!s/([0-9a-z])(_)([a-z0-9])/\1\u\3/g'
它的作用:
问题是第二个例子。为什么它不能以一位数字而不是更多数字的数字失败?我尝试使用[[:digit:]]并将([0-9a-z])替换为[[a-z0-9] | [[:digit:]])。他们工作相同。
先谢谢您。
答案 0 :(得分:0)
手动遍历它,然后进行替换,直到没有其他要替换的为止。
sed -re '/[A-Z]+/!{ : again; /([0-9a-zA-Z])_([a-z0-9])/{ s//\1\u\2/; b again; }; }'
我在第一个正则表达式中添加了A-Z
来处理以下情况:
this_is_a_simple -> thisIsASimple
在第一个匹配之后它变成thisIsA_simple
,因此在第二个循环中我们要匹配A_simple
。
也许更好的版本是:
sed -re '/[A-Z]+/!{ : again; /(.*[0-9a-z])_([a-z0-9])/{ s//\1\u\2/; b again; }; }'
因为正则表达式是贪婪的,所以它将从头开始替换,因此this_is_a_simple
首先变成this_is_aAimple
,然后变成this_isASimple
,然后变成thisIsASimple
。