【问题标题】:Sed cannot convert uppercase to lowercasesed 无法将大写转换为小写
【发布时间】:2014-07-27 14:45:33
【问题描述】:

我想将 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}

【问题讨论】:

  • 您的代码对我有用。您可能需要指定您正在使用哪个操作系统和sed 的哪个版本。
  • 你在使用 GNU sed 吗?您的代码适用于 GNU sed 4.2.1 版。要找出您使用的版本, sed --version

标签: bash sed


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这是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}
    

    【讨论】:

    • @lifeGoGoGo awk 也是一个非常强大的文件处理工具。我建议你试试看。
    猜你喜欢
    • 2011-07-21
    • 2022-01-03
    • 1970-01-01
    • 2018-08-17
    • 2022-01-24
    • 1970-01-01
    • 2011-06-01
    • 2011-10-29
    • 2016-02-24
    相关资源
    最近更新 更多