Home > Enterprise >  Linux sed expression to convert the camelCase keys to underscore strings
Linux sed expression to convert the camelCase keys to underscore strings

Time:03-26

I could not get the regex to convert only the key from a key value pair from camel case to underscore sting.

The expressions like sed -E 's/\B[A-Z]/_\U&/g' converts the full value, but I would like to limit the conversion only to the key here.

 $ echo UserPoolId="eu-west-1_6K6Q2bT9c" | sed -E 's/\B[A-Z]/_\U&/g' 
   User_Pool_Id=eu-west-1_6_K6_Q2b_T9c

but i would like to get User_Pool_Id=eu-west-1_6K6Q2bT9c

CodePudding user response:

Doing this in sed is somewhat challenging because you need a more complex regex and a more complex script. Perhaps a better solution would be to use the shell's substitution facilities to isolate the part you want to operate on.

string='UserPoolId="eu-west-1_6K6Q2bT9c"'
prefix=${string%%=*}
suffix=${string#"$prefix"}
sed -E -e 's/\B[A-Z]/_\U&/g' -e "s/\$/$suffix/" <<<"$prefix"

Bash also has built-in parameter expansion to convert the first character of a string to upper case, but perhaps this is sufficient to solve your immediate problem.

CodePudding user response:

This might work for you (GNU sed):

sed 's/=/&\n/;h;s/\B[[:upper:]]/_&/g;G;s/\n.*\n//' file

Introduce a newline after the = and copy the result to the hold space.

Insert underscores in the required places.

Append the copy to the current line and remove the middle, leaving the answer.

  • Related