【问题标题】:Sed & awk to replace string from JSON outputsed & awk 替换 JSON 输出中的字符串
【发布时间】:2021-10-20 13:47:44
【问题描述】:

我正在执行下面的命令以从 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 $2}' 
  % 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,这意味着上面的命令应该像下面这样打印

any-dashboard
many-dashboard
too-dashboard
maximum-dashboard
minimum-dashboard

任何人都可以在这里帮助我,我用 sed 尝试了几件事,但没有得到确切的结果,而且我对 JQ 不了解。

问候, 山姆

【问题讨论】:

  • 使用实际发出的 JSON 来编辑您的问题,而不是使用 sed 和 awk 处理后剩下的内容

标签: curl awk sed jq


【解决方案1】:

这可能对你有用(GNU sed):

sed -nE 's#".*/(.*)"#\1#p' file

关闭隐式打印-n,并打开扩展正则表达式-E(在某些平台上为-r)。

对所需字符串进行模式匹配并将其替换为预期的部分并打印结果。

注意替换命令 LHS 中的(...) 称为反向引用,可以在 RHS 中调用。还使用# 作为替代分隔符,而不是通常的/,这是匹配的一部分。

【讨论】:

  • 这是确切的要求,感谢您的解释,这肯定会对我的未来有所帮助。
【解决方案2】:

如果下面的 awk 语句(多字符 RS 需要 GNU awk)位于命令行的末尾,请尝试添加这个 gsub 函数,看看是否得到了你想要的:

Current:
awk -v RS=',"' -F: '/^uri/ {print $2}'

改为:

awk -v RS=',"' -F: '/^uri/ {gsub("/","-",$2);print $2}'

【讨论】:

  • Potong 分享了我正在寻找的确切命令,即使您的解决方案非常接近我的要求,但它没有删除双引号,感谢您的时间和帮助 :)
猜你喜欢
  • 2017-02-08
  • 2015-01-13
  • 2019-08-07
  • 2015-03-05
  • 2020-02-18
  • 2015-12-18
  • 2015-10-25
  • 1970-01-01
  • 2016-10-29
相关资源
最近更新 更多