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中调用。还使用 # 作为替代分隔符,而不是作为匹配的一部分的通常 /