Sed无法将大写转换为小写

时间:2014-07-27 04:41:50

标签: bash sed

我想将jSON消息中的“电子邮件地址”差异更改为小写。我尝试使用sed但失败了,因为\ L选项对我不起作用。我错过了什么吗?

a="{"id":null,"enabled":true,"password":"","email":"Foo@bar.com","lastName":"Foo","firstName":"lol"}"
echo $a | sed -e 's/email:[[:graph:]].*,last/\L&/g'

结果显示:

{id:null,enabled:true,password:,{L}email:Foo@bar.com,lastName:Foo,firstName:lol}

我想要的结果:

{id:null,enabled:true,password:,email:foo@bar.com,lastName:Foo,firstName:lol}

2 个答案:

答案 0 :(得分:3)

我假设您没有GNU sed,因此无法访问\L。相反,尝试perl:

echo "$a" | perl -pe 's/(email:[[:graph:]]*,last)/\L\1/'

答案 1 :(得分:1)

这是awk

awk -F, '{for (i=1;i<=NF;i++) if ($i~/email/) $i=tolower($i)}1' <<< "$a"
{id:null enabled:true password: email:foo@bar.com lastName:Foo firstName:lol}