使用sed从字符串中提取值

时间:2018-08-30 19:56:49

标签: regex bash 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。

我应该怎么解决?

预先感谢

2 个答案:

答案 0 :(得分:1)

感谢anubhava,我用以下方法解决了我的问题:

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

答案 1 :(得分:1)

如果找到字符串:

  • 字符串中肯定存在
  • 这是第一组数字

GNU grep的工作原理:

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

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

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