【问题标题】:How to use sed to add double quotes around every word, excluding colons and commas如何使用sed在每个单词周围添加双引号,不包括冒号和逗号
【发布时间】:2020-07-15 18:40:12
【问题描述】:

我想更改一个字符串,以便在每个“单词”周围加上双引号,不包括冒号和逗号':,'。

例如,我的输入可能如下所示:

[分析:真,限制:假,STRING_PARAMETER:世界, JOB_NAME:Hello_Jenkins]

但我希望它显示为

["ANALYSIS":"true", "RESTRICTED":"false", "STRING_PARAMETER":"World", "JOB_NAME":"Hello_Jenkins"]

我一直在使用类似的东西(使用'_'作为分隔符)

'echo ${params} | sed -i "s_\'/\\([^:]*\\):/i\'_\'"$1" :\'_g" '

根据我在网上找到的内容,但它对我的字符串没有任何更改。

【问题讨论】:

  • 你的意思是这样吗? sed 's/\([[:alnum:]_][[:alnum:]_]*\)/"\1"/g' <<< "[ANALYSIS:true, RESTRICTED:false, STRING_PARAMETER:World, JOB_NAME:Hello_Jenkins]"demo
  • 请注意,-i 选项表示“--inplace”,这仅在您指定要处理的sed 的文件名时有用,即sed -i '/script/' file。祝你好运。
  • 你的正则表达式中有一堆's,但你的输入中没有's 加上一些其他奇怪的东西,所以正则表达式永远无法匹配输入的任何部分。

标签: regex shell jenkins sed


【解决方案1】:
> sed -r 's/[^], :[]+/"&"/g' file
["ANALYSIS":"true", "RESTRICTED":"false", "STRING_PARAMETER":"World", "JOB_NAME":"Hello_Jenkins"]

在上面的sed 中,我们排除了冒号、逗号、方括号和空格,正如您的示例所述。如果您的例子没有完全代表您的情况,您可以修改排除的字符,但表达式中括号的顺序很重要。

【讨论】:

    【解决方案2】:
    $ echo '[ANALYSIS:true, RESTRICTED:false, STRING_PARAMETER:World, JOB_NAME:Hello_Jenkins]' |
        sed 's/[[:alnum:]_]\+/"&"/g'
    ["ANALYSIS":"true", "RESTRICTED":"false", "STRING_PARAMETER":"World", "JOB_NAME":"Hello_Jenkins"]
    

    或者如果您必须在正则表达式中排除而不是包含字符:

    $ echo '[ANALYSIS:true, RESTRICTED:false, STRING_PARAMETER:World, JOB_NAME:Hello_Jenkins]' |
        sed 's/[^][,: ]\+/"&"/g'
    ["ANALYSIS":"true", "RESTRICTED":"false", "STRING_PARAMETER":"World", "JOB_NAME":"Hello_Jenkins"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 2017-08-29
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多