【问题标题】:Using Sed to search and replace JSON using regex from stdin使用 Sed 使用标准输入中的正则表达式搜索和替换 JSON
【发布时间】:2013-05-30 04:22:50
【问题描述】:

如何使用 sed 在标准输入中搜索正则表达式 "pk": [0-9]+ 并将其替换为 "pk": null

例如将"pk": 123 转换为"pk": null

我尝试过类似的方法:

cat mydata.json | sed -e s/\"pk\"\:\s[0-9]+/\"pk\"\:\snull/g

但这没有任何效果。削减正则表达式,它似乎在[0-9]+ 处中断,但我不知道为什么,因为这既是一个简单又有效的正则表达式。我做错了什么?

【问题讨论】:

    标签: regex sed


    【解决方案1】:

    猫不是必需的。

    sed 's/\(.*:\s*\)[0-9]\+/\1null/' file
    

    如果你需要pk:

    sed 's/\("pk":\s*\)[0-9]\+/\1null/' file
    

    例如

    kent$  echo '"pk": 123'|sed 's/\(.*:\s*\)[0-9]\+/\1null/'
    "pk": null
    

    【讨论】:

      【解决方案2】:

      这应该可行:

      sed -e 's/"pk": [0-9]\+/"pk": null/g' mydata.json
      

      【讨论】:

      • 据我所知,Jaypal 不会以这种方式使用 cat
      • @Kent 抱歉,我刚刚复制了 OP 在sed 命令的尝试并对其进行了修改。 :(
      • 它必须使用管道标准输入。我仅将 mydata.json 用作示例。我实际上没有文字文件。
      • @Jaypal 正是我的想法。 :D
      • 管道应该也能正常工作:cat mydata.json | sed 's/"pk": [0-9]\+/"pk": null/g'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-04
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 2018-02-16
      • 2018-08-22
      • 2023-03-02
      相关资源
      最近更新 更多