2014-07-27 202 views
4

我想将jSON消息中的“电子邮件地址”方差改为小写字母。我试图使用sed但失败了,因为\ L选项对我不起作用。我错过了什么?Sed不能将大写字母转换为小写字母

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

结果表明:

{id:null,enabled:true,password:,{L}email:[email protected],lastName:Foo,firstName:lol} 

结果我想:

{id:null,enabled:true,password:,email:[email protected],lastName:Foo,firstName:lol} 
+0

您的代码为我工作。你可能想要指定你正在使用哪个操作系统和'sed'的哪个版本。 – John1024

+0

这可能是OSX。 – konsolebox

+1

你在使用GNU sed吗?你的代码在GNU sed版本4.2.1中工作。 要知道你使用的是哪个版本, sed --version – toddlermenot

回答

3

我会认为你没有GNU sed的,因此不必\L访问。相反,尝试的Perl:

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

它有诀窍! Cheerio! – SexyNerd

1

这里是一个awk

awk -F, '{for (i=1;i<=NF;i++) if ($i~/email/) $i=tolower($i)}1' <<< "$a" 
{id:null enabled:true password: email:[email protected] lastName:Foo firstName:lol} 
+0

虽然我对awk不熟悉,但上面的脚本仍然可以运行 – SexyNerd

+0

@lifeGoGoGo awk也是一个非常强大的操作文件。我建议你尝试一下。 – Jotne

相关问题