我有一个shell脚本,它接受以逗号分隔的参数
-s 1234,1244,1567
将其传递给curl PUT json字段。 Json需要"1234","1244","1567"
格式的值。
目前,我正在传递参数,其中已有引号:
-s "\"1234\",\"1244\",\"1567\""
,这是有效的,但用户抱怨它打字太多而且难以做到。因此,我只想采用逗号分隔列表,就像我在顶部并以编程方式粘贴引号一样。
基本上,我希望将参数作为1234,2345传递,最后作为"1234","2345"
的变量
我已经开始读到这里最简单的方法是使用sed,但我真的不熟悉它,而且我的所有努力都失败了。
答案 0 :(得分:2)
awk
救援!
$ awk -F, -v OFS='","' -v q='"' '{$1=$1; print q $0 q}' <<< "1234,1244,1567"
"1234","1244","1567"
使用sed
或更短
$ sed -r 's/[^,]+/"&"/g' <<< "1234,1244,1567"
"1234","1244","1567"
将其翻译回awk
$ awk '{print gensub(/([^,]+)/,"\"\\1\"","g")}' <<< "1234,1244,1567"
"1234","1244","1567"
答案 1 :(得分:1)
你可以用这个:
echo QV=$(echo 1234,2345,56788 | sed -e 's/^/"/' -e 's/$/"/' -e 's/,/","/g')
结果:
echo $QV
"1234","2345","56788"
只需在开头,结尾添加双引号,并用引号/逗号/引号全局替换逗号。
答案 2 :(得分:1)
您可以在BASH中执行此操作:
git push origin branch-b --force
答案 3 :(得分:1)
很容易使用sed
$ echo '1234,1244,1567' | sed 's/[0-9]*/"\0"/g'
"1234","1244","1567"
[0-9]*
零个连续数字,因为*
贪婪,它会尝试尽可能多地匹配"\0"
双重引用匹配的模式,默认情况下整个匹配保存在\0
g
全局标志,替换所有此类模式如果某些\0
版本无法识别sed
,请改用&
:
$ echo '1234,1244,1567' | sed 's/[0-9]*/"&"/g'
"1234","1244","1567"
与perl
$ echo '1234,1244,1567' | perl -pe 's/\d+/"$&"/g'
"1234","1244","1567"
注意:使用*
而不是+
与perl
一起使用
$ echo '1234,1244,1567' | perl -pe 's/\d*/"$&"/g'
"1234""","1244""","1567"""
""$
我认为sed
和perl
之间的区别与此问题类似:GNU sed, ^ and $ with | when first/last character matches
答案 4 :(得分:0)
使用sed
:
$ echo 1234,1244,1567 | sed 's/\([0-9]\+\)/\"\1\"/g'
"1234","1244","1567"
即。使用反向引用(\1
)引用的相同数字字符串替换所有数字字符串。