如何用awk/sed提取curl响应中的版本号?原命令无效求助
正确提取版本号的方法
你的awk命令没生效是因为分隔符选得不对,目标字符串里的"是HTML转义的双引号,原分隔符无法命中有效拆分点,导致输出整行内容。以下是两种可行的解决方法:
方法一:使用sed提取
curl 'https://internal-url.com/about' \ -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36' \ | sed -n 's/.*"version":"\([0-9.]*\)".*/\1/p'
- 逻辑:用
-n抑制默认输出,正则匹配包含version键值对的片段,用\([0-9.]*\)捕获版本号(数字和点的组合),最后用\1输出捕获到的内容。
方法二:使用awk提取
方式1:正则匹配捕获
curl 'https://internal-url.com/about' \ -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36' \ | awk '/"version"/ {match($0, /"version":"([0-9.]+)"/, arr); print arr[1]}'
- 逻辑:先筛选包含version关键词的行,用
match函数匹配正则并将捕获的版本号存入数组arr,最后输出数组的第一个元素。
方式2:分隔符拆分
curl 'https://internal-url.com/about' \ -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36' \ | awk -F'"version":"|"' '{if ($2 != "") print $2}'
- 逻辑:将字段分隔符设为
"version":"或",版本号会落在第二个字段位置,判断不为空后输出。
内容的提问来源于stack exchange,提问作者user51
相关产品推荐
相关产品推荐

