代码之家  ›  专栏  ›  技术社区  ›  markzzz

如何在分隔符分隔的值周围添加双引号?

  •  0
  • markzzz  · 技术社区  · 7 年前

    我取一个字符串,其值用 , .我需要在“周围”加上双引号,然后在每次拆分后进行修剪。

    以下是我的实际代码:

    input="TAG1, TAG2"
    output='[ "'${input//, /\", \"}'" ]'
    echo "$output"
    

    正确显示:

    [ "TAG1", "TAG2" ]
    

    但是:

    1. 如果我使用 input="TAG1,TAG2" (即,之后没有空间) , )
    2. 如果我使用 input=" TAG1, TAG2 " ,它保留空间,不修剪每根火柴。它应该是,每一项。

    你会怎么做?

    0 回复  |  直到 7 年前
        1
  •  2
  •   anubhava    7 年前

    这里有一个 jq 解决方案:

    jq -cR '. | gsub("^ +| +$"; "") | split(" *, *"; "")' <<< "TAG1,TAG2"
    ["TAG1","TAG2"]
    
    jq -cR '. | gsub("^ +| +$"; "") | split(" *, *"; "")' <<< "TAG1, TAG2"
    ["TAG1","TAG2"]
    
    jq -cR '. | gsub("^ +| +$"; "") | split(" *, *"; "")' <<< "   TAG1,       TAG2     "
    ["TAG1","TAG2"]
    

    附言: 去除 -c 如果你想要漂亮 json 输出


    你也可以使用 awk :

    cat comma.csv
    

    BEGIN {
       FS = " *, *"
       OFS=", "
    }
    {
       for (i=1; i<=NF; i++) {
          gsub(/^ *| *$/, "", $i)
          $i = "\"" $i "\""
       }
    
       print "[ " $0 " ]"
    }
    

    并将其用作:

    awk -f comma.csv <<< "TAG1, TAG2"
    [ "TAG1", "TAG2" ]
    
    awk -f comma.csv <<< "TAG1,TAG2"
    [ "TAG1", "TAG2" ]
    
    awk -f comma.csv <<< "   TAG1,   TAG2   "
    [ "TAG1", "TAG2" ]
    

    sed 解决方案:

    sed 's/^ */[ "/; s/ *$/" ]/; s/ *, */", "/g' <<< "       TAG1,        TAG2     "
    [ "TAG1", "TAG2" ]    
    
    sed 's/^ */[ "/; s/ *$/" ]/; s/ *, */", "/g' <<< "TAG1,TAG2"
    [ "TAG1", "TAG2" ]
    
    sed 's/^ */[ "/; s/ *$/" ]/; s/ *, */", "/g' <<< "TAG1 , TAG2"
    [ "TAG1", "TAG2" ]
    
        2
  •  1
  •   tripleee    7 年前

    我不知道“修剪”是什么意思,我认为可以安全地忽略空白。

    首先让我们把输入读入一个数组。阅读用空格或逗号分隔的项目。

    input="        TAG1        ,      TAG2        "
    IFS=', ' read -r -a input <<<"$input"
    

    然后创建 output :第一次输出数组元素quoetd " 在单独的换行符上,然后用逗号连接,添加前导 [ 拖尾 ] :

    output="[ $(printf '"%s"\n' "${input[@]}" | paste -sd,) ]"
    echo "$output"
    
    推荐文章