Sed & awk 替换 JSON 输出中的字符串
Sed & awk to replace string from JSON output
我正在执行下面的命令以从 json 输出中获取特定的字符串,这里我使用打印所有必填字段的字符串“uri”进行搜索。
# curl -X GET --insecure -H "$(cat /token/.bearer_header)" http://localhost:3000/api/search?query=% | sed -e
's/[{}]/''/g' | awk -v RS=',"' -F: '/^uri/ {print }'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2410 0 2410 0 0 40166 0 --:--:-- --:--:-- --:--:-- 40847
"ab/any-dashboard"
"ab/many-dashboard"
"ab/too-dashboard"
"ab/maximum-dashboard"
"ab/minimum-dashboard"
现在我只想将“ab/any-dashboard”替换为任何仪表板,这意味着上面的命令应该像下面这样打印
any-dashboard
many-dashboard
too-dashboard
maximum-dashboard
minimum-dashboard
任何人都可以在这里帮助我我用 sed 尝试了几件事但没有得到准确的结果,而且我不了解 JQ。
此致,
山姆
如果下面的 awk 语句(对于多字符 RS 需要 GNU awk)在命令行的末尾,尝试添加这个 gsub 函数,看看是否得到你想要的:
Current:
awk -v RS=',"' -F: '/^uri/ {print }'
更改为:
awk -v RS=',"' -F: '/^uri/ {gsub("/","-",);print }'
这可能对你有用 (GNU sed):
sed -nE 's#".*/(.*)"##p' file
关闭隐式打印 -n
,并打开扩展正则表达式 -E
(-r
在某些平台上)。
对所需字符串进行模式匹配并将其替换为预期部分并打印结果。
N.B。替换命令LHS中的(...)
称为反向引用,可以在RHS中调用。还使用 #
作为替代分隔符,而不是作为匹配的一部分的通常 /
。
我正在执行下面的命令以从 json 输出中获取特定的字符串,这里我使用打印所有必填字段的字符串“uri”进行搜索。
# curl -X GET --insecure -H "$(cat /token/.bearer_header)" http://localhost:3000/api/search?query=% | sed -e
's/[{}]/''/g' | awk -v RS=',"' -F: '/^uri/ {print }'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2410 0 2410 0 0 40166 0 --:--:-- --:--:-- --:--:-- 40847
"ab/any-dashboard"
"ab/many-dashboard"
"ab/too-dashboard"
"ab/maximum-dashboard"
"ab/minimum-dashboard"
现在我只想将“ab/any-dashboard”替换为任何仪表板,这意味着上面的命令应该像下面这样打印
any-dashboard
many-dashboard
too-dashboard
maximum-dashboard
minimum-dashboard
任何人都可以在这里帮助我我用 sed 尝试了几件事但没有得到准确的结果,而且我不了解 JQ。
此致, 山姆
如果下面的 awk 语句(对于多字符 RS 需要 GNU awk)在命令行的末尾,尝试添加这个 gsub 函数,看看是否得到你想要的:
Current:
awk -v RS=',"' -F: '/^uri/ {print }'
更改为:
awk -v RS=',"' -F: '/^uri/ {gsub("/","-",);print }'
这可能对你有用 (GNU sed):
sed -nE 's#".*/(.*)"##p' file
关闭隐式打印 -n
,并打开扩展正则表达式 -E
(-r
在某些平台上)。
对所需字符串进行模式匹配并将其替换为预期部分并打印结果。
N.B。替换命令LHS中的(...)
称为反向引用,可以在RHS中调用。还使用 #
作为替代分隔符,而不是作为匹配的一部分的通常 /
。