【问题标题】:Replace symbol in string with jq用 jq 替换字符串中的符号
【发布时间】:2021-11-04 16:26:37
【问题描述】:

"'mysql'" 这样的字符串转换为"mysql" 时遇到一些问题。对于这种特殊情况,我可以使用sub

sub("'\'mysql\''";"mysql")

但我需要一个更通用的 jq 规则来删除单引号,例如"'mystring'" => "mystring"

【问题讨论】:

  • 有什么问题?
  • 我需要从“'mysql'”中获取“mysql”

标签: jq


【解决方案1】:

使用命名捕获:

$ echo "[\"'mysql'\", \"'whatever'\"]" \
| jq '.[] | sub("'\''(?<s>[^'\'']+)'\''"; .s)'
"mysql"
"whatever"

解释:

  • '\'' 单引号(为 shell 转义)
  • (?&lt;s&gt; 一个名为 s 的捕获组的开始
  • [^'\'']+' 之外的一个或多个字符(为外壳转义)
  • ) 捕获组结束
  • '\'' 一个单引号(为 shell 再次转义)

【讨论】:

  • 我只给了json的一部分,我需要一个更通用的规则。而不是“'mysql”“任何东西都可以
  • 总而言之,我需要删除任何字符串的''
  • @mifogon:已更新。
  • 只写字符串,不要写数组
  • @mifogon 对于单个字符串,只需删除 .[] |
猜你喜欢
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 2019-08-13
  • 2013-09-23
相关资源
最近更新 更多