从生成的卷曲结果中读取特定路径字符串(SED/AWK/Grep)

To read specific path string from generation of curl result(SED/AWK/Grep)

我正在尝试从我使用 curl 命令提取结果的地方读取特定路径(/opt/links/stances/2)。

卷曲命令:-

curl -s http://localhost:8080/stances/1/Dirs 

以上命令的结果:-

{"LocalWorkingDir":"/opt/links/stances/1","Workers":[{"WorkerInstanceID":2,"WorkerHostname":"yolo.automation.local","WorkerInstanceRunDir":"/opt/links/stances/2"}]}

命令我正在尝试从生成的输出中读取 /opt/links/stances/2 :-

curl -s http://localhost:8080/stances/1/Dirs |  sed 's||" "|' | awk '{print }'

我没有结果。 请帮我命令读取路径(/opt/links/stances/2)。提前致谢。

由于 OP 无法安装 jq,可以使用显示的示例尝试以下操作。但这不可能是完整的,这完全是按照显示的示例进行的。

awk 'match([=10=],/"WorkerInstanceRunDir":"[^"]*"}/){print substr([=10=],RSTART+24,RLENGTH-26)}' Input_file

解释:使用match函数匹配正则表达式"WorkerInstanceRunDir":"[^"]*"},它将匹配来自“WorkerInstanceRunDir”的所有内容直到下一次出现 " 后跟 } 然后打印从 RSTART+24 开始的子字符串直到 RLENGTH-26 的值在这里。

或者尝试仅按照所示示例设置字段分隔符。

awk -F'"|}' '$(NF-5)=="WorkerInstanceRunDir"{print $(NF-3)}' Input_file

如果你有 gnu grep 那么你可以像这样使用 PCRE 正则表达式:

curl -s http://localhost:8080/stances/1/Dirs | 
grep -oP '"WorkerInstanceRunDir":"\K[^"]+'

/opt/links/stances/2

详情:

  • "WorkerInstanceRunDir":":匹配文字文本"WorkerInstanceRunDir":"
  • \K: 重置匹配信息
  • [^"]+:匹配 1+ 个非"字符

如果你没有安装 gnu grep 然后使用这个 sed:

curl -s http://localhost:8080/stances/1/Dirs |
sed -E 's/.*"WorkerInstanceRunDir":"([^"]+).*//'