【问题标题】:Extracting value from a string using sed使用 sed 从字符串中提取值
【发布时间】:2018-08-30 19:56:48
【问题描述】:

我的示例字符串如下:

"firstName":"Alice", "dealersCode":850503,"productCode":"99110X0"

我想从dealersCode 中提取850503。为此,我使用 sed 尝试了以下正则表达式:

sed -n 's/.*dealersCode:\([0-9][0-9][0-9][0-9][0-9][0-9]*\).*/\1/p'

上面的命令什么也没打印,所以我相信我做错了什么。我在https://regex101.com/ 上创建了以下正则表达式:

(?:\"dealersCode|\')(?<key>[^"]*)(?:\"|\')(?=:)(?:\:\s*)(?:\"|\')?(?<value>true|false|[0-9a-zA-Z\+\-\.\$]*)

它不适用于 bash。

我应该怎么做才能解决这个问题?

提前致谢

【问题讨论】:

  • 您可以使用:sed 's/^.*"dealersCode":\([0-9]*\).*/\1/'
  • grep -oP '"dealersCode":\K[0-9]+'
  • 字符串的片段部分是否包含一些 JSON 数据?如果是这样,请使用 jq,而不是 sed。
  • @anubhava,非常感谢,工作完美
  • @PesaThe,这个 grep 不起作用。看起来语法有问题

标签: regex bash sed


【解决方案1】:

感谢anubhava,我解决了我的问题:

sed 's/^.*"dealersCode":\([0-9]*\).*/\1/'

【讨论】:

    【解决方案2】:

    如果要找到的字符串:

    • 肯定存在于字符串中,
    • 并且是第一组数字

    GNU grep 工作:

    grep -wo '[0-9]*' <<< \
       '"firstName":"Alice", "dealersCode":850503,"productCode":"99110X0"' 
    

    如果字符串可能不存在,这样会更好:

    grep 'dealersCode[^,]*,' | grep -wo '[0-9]*' <<< \
       '"firstName":"Alice", "dealersCode":850503,"productCode":"99110X0"'
    

    【讨论】:

      猜你喜欢
      • 2016-08-25
      • 2017-01-31
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 2022-12-23
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多