【问题标题】:jq remove spaces after firstjq 在 first 之后删除空格
【发布时间】:2018-03-03 18:57:03
【问题描述】:

看似简单,但远非如此。尝试了很多东西。我所拥有的最好的:

echo "low quality      not gonna apologize" | jq -r 'gsub("[\\s+]"; " "; "g")'

parse error: Invalid numeric literal at line 1, column 4

目标是用 1 个空格替换任何类型的多个空格。请注意,我已经从此流中删除了制表符和换行符。这是 bash 外壳。在我正在构建的更大应用程序的上下文中,我也没有收到此错误,其中代码只是简单而安静地没有将多个空格更改为单个空格,原因是 IDK。

【问题讨论】:

  • 加号量词应该在括号表达式之外,使用"\\s+"
  • echo "低质量不会道歉" | jq -r 'gsub("[\\s]+"; " "; "g")' 解析错误:第 1 行第 4 列的数字文字无效
  • echo "低质量不会道歉" | jq -r 'gsub("\\s+"; " "; "g")' 解析错误:第 1 行第 4 列的数字文字无效
  • ("[\\s+]"; " "; "g") 是奇怪的分隔符语法。确定要使用这个奇怪的实用程序吗?

标签: regex jq


【解决方案1】:

jq的正确方法:

echo "low quality      not gonna apologize" | jq -Rr 'gsub("\\s+";" ";"g")'
  • -R - 原始输入;每行文本都作为字符串传递给过滤器

输出:

low quality not gonna apologize

【讨论】:

  • 我的问题是-1,我还不能让 mystelf 投票或接受答案。但是,如果您可以支持我的问题,我将很乐意分享信用。谢谢。我猜我被人骗了。
  • @GeoffreyAnderson,我没有投反对票,但如果你让我给你一个支持的礼物 - 你得到了我的支持。但这不会让你在未来免于被否决
【解决方案2】:

多种选择中的两种:

$ echo '"low quality      not gonna apologize"' | jq -r 'gsub("\\s+"; " ")'
low quality not gonna apologize

$ jq -n --arg in "low quality      not gonna apologize" '$in | gsub("\\s+"; " ")'
"low quality not gonna apologize"

注意:

  • 并非每个 shell 字符串都是 JSON 字符串。
  • --arg 命令行选项具有将 shell 字符串强制转换为 JSON 字符串的效果。
  • 如果您使用“gsub”,也无需指定“g”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-06
    • 2017-02-03
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多