首页 > 解决方案 > 使用 sed 从字符串中提取值

问题描述

我的示例字符串如下:

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

我想从中850503提取dealersCode。为此,我使用 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。

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

提前致谢

标签: regexbashsed

解决方案


如果要找到的字符串:

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

GNU grep工作:

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

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

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

推荐阅读