我希望将curl
数据转换为 shell 脚本变量,然后像文件一样使用cat
或awk
操作该变量。
这是可能的,还是有解决方法?我必须将curl
命令保存到文件中吗?
对于我想要做的每一位字符串格式,我是否必须运行curl
多次?
我正在curl
输入 ipinfo.io,并希望输出“城市”和“地区”的匹配行。我知道如何根据需要使用awk
和sed
格式化输出。
例如,尝试获取curl ipinfo.io/"8.8.8.8"
Google DNS IP 地址的结果。
我想只打印“Mountain View”和“California”,最好在同一行上打印一些通用格式,例如“Mountain View, California”。
一般来说,解析 JSON 对象有更合适的方法,但由于在这种情况下 JSON 对象非常简单,您可以将
curl
的输出存储在一个变量中(这是可能的)并只使用 AWK:但是,除非您想
curl
多次使用 ' 的输出,否则您可以只使用管道:<<<
是一种输入重定向形式,称为“此处字符串”;它将命令的 STDIN 从终端重定向到字符串。这里发生的是
$var
在双引号之间展开;AWK 命令的 STDIN 从终端重定向到扩展字符串,因此 AWK 将字符串作为其输入文件读取。你当然可以。如果内容不是太大,并且想要运行多个命令来解析内容,那么最好将其缓存在内存中,而不是每次都重新下载。
将结果存储
curl
在变量中:在其上运行命令:
双引号 no `"$ipinfo" 对于保留所有空白字符很重要。
不将内容保存在变量中的“解决方法”是找出一种在单个管道中处理内容的方法,就像@kos所做的那样。
另一种简单且更易读的方法,您可以使用
python
所有基于 linux 的系统中都存在的 json 来为您解析 json简单地说,导入
json
并sys
打包以加载json
对象,然后从对象中打印result
您需要的任何属性:\
我以一种更易读的方式添加了脚本,但是如果您需要将它写成多行,您应该放入一行或在每行的末尾添加。由于
curl
将是 JSON 的输出,因此适当/更简单的工具似乎是jq
(一个轻量级且灵活的命令行 JSON 处理器):