【问题标题】:How to extract text with sed or grep and regular expression json如何使用 sed 或 grep 和正则表达式 json 提取文本
【发布时间】:2019-02-27 20:51:11
【问题描述】:

您好,我正在使用 curl 获取一些我需要清理的信息。 这是来自 curl 命令:

{"ip":"000.000.000.000","country":"Italy","city":"Milan","longitude":9.1889,"latitude":45.4707, etc..

我需要输出“Ita”,即国家的前三个字母。

阅读sed JSON regular expression后我尝试适应导致

sed -e 's/^.*"country":"[a-zA-Z]{3}".*$/\1/

但这行不通。

你能帮忙吗?

【问题讨论】:

  • 使用sed -E 's/.*"country":"([a-zA-Z]{3}).*/\1/' file。或者,grep -Po '"country":"\K[A-Za-z]{3}' file
  • 不推荐。使用 JSON 解析器,例如 jq

标签: bash curl sed expression


【解决方案1】:

使用,您可以:

curl .... | jq -r '.country[0:3]'

如果您需要国家设置为前 3 个字符,

jq '.country = .country[0:3]'

一些相当高级的 bash:

{
    read country
    read city
} < <(
    curl ... |
    jq -r '.country[0:3], .city[0:3]' 
)

然后:

$ echo "$country $city"
Ita Mil

【讨论】:

  • 非常感谢,这变得容易多了!我能问你如何将例如“Ita”和“Mil”分配给两个不同的变量,只运行一次 curl 命令?
  • 我只是得到一个错误:意外标记附近的语法错误&lt;' : }
  • 您需要使用 bash 或 ksh(或者可能是 zsh),但不是 sh&lt; &lt;(...) 是来自 Process Substitution 的重定向
猜你喜欢
  • 2015-09-17
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 2011-11-07
  • 2022-01-06
  • 2020-11-29
相关资源
最近更新 更多