Fáb*_*oro 3 regex bash awk sed
我正在做这样的事情:
echo 'foo_bar_baz=foo_bar_baz' | sed -r 's/_([[:alnum:]])/\U\1/g'
Run Code Online (Sandbox Code Playgroud)
并得到结果:
fooBarBaz=fooBarBaz
Run Code Online (Sandbox Code Playgroud)
有办法fooBarBaz=foo_bar_baz代替吗?
我试图做到这一点,非贪婪:
echo 'foo_bar_baz=foo_bar_baz' | sed -r 's/([^=].*?)_([[:alnum:]])/\1\U\2/g'
Run Code Online (Sandbox Code Playgroud)
但是结果是这样的:
foo_bar_baz=foo_barBaz
Run Code Online (Sandbox Code Playgroud)
我需要从中进行转换:
foo_bar_baz=foo_bar_baz
Run Code Online (Sandbox Code Playgroud)
至:
fooBarBaz=foo_bar_baz
Run Code Online (Sandbox Code Playgroud)
编辑:添加更多的通用解决方案,也将适用于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
Run Code Online (Sandbox Code Playgroud)
对于,这应该是一件容易的事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'
Run Code Online (Sandbox Code Playgroud)
要简单地删除_第一部分中的用法(这不会使字母大写):
echo 'foo_bar_baz=foo_bar_baz' | awk 'BEGIN{FS=OFS="="}{gsub(/_/,"",$1)} 1'
Run Code Online (Sandbox Code Playgroud)