我正在做这样的事情:
echo 'foo_bar_baz=foo_bar_baz' | sed -r 's/_([[:alnum:]])/\U\1/g'
并得到结果:
fooBarBaz=fooBarBaz
有没有办法获取 fooBarBaz=foo_bar_baz
呢?
我尝试这样做,非贪婪:
echo 'foo_bar_baz=foo_bar_baz' | sed -r 's/([^=].*?)_([[:alnum:]])/\1\U\2/g'
但结果是这样的:
foo_bar_baz=foo_barBaz
我需要的是转换自:
foo_bar_baz=foo_bar_baz
到:
fooBarBaz=foo_bar_baz
最佳答案
编辑: 添加更多适用于 =
之前超过 3 个值的通用解决方案。
awk '
BEGIN{
FS=OFS="="
}
{
num=split($1,array,"_")
for(i=2;i<=num;i++){
val=(val?val:"")toupper(substr(array[i],1,1)) substr(array[i],2)
}
$1=array[1] val
val=""
}
1
' Input_file
这对 awk
来说应该是一个简单的任务。
echo 'foo_bar_baz=foo_bar_baz' | awk '
BEGIN{
FS=OFS="="
}
{
split($1,array,"_")
$1=array[1] toupper(substr(array[2],1,1)) substr(array[2],2) toupper(substr(array[3],1,1)) substr(array[3],2)
}
1'
在第一部分使用中简单地删除 _
(这不会使字母大写):
echo 'foo_bar_baz=foo_bar_baz' | awk 'BEGIN{FS=OFS="="}{gsub(/_/,"",$1)} 1'
关于regex - 进行各种替换,但只能在字符之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58141100/