从生成的卷曲结果中读取特定路径字符串(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":"([^"]+).*//'
我正在尝试从我使用 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":"([^"]+).*//'