
「string1,string2,string3」のような文字列があります
同じものを["string1","string2","string3"]に変換したい
使ってみた
sed 's/\(,\)/"\1"/g'
しかし、それは戻ってくるstring1","string2","string3
答え1
すでにカンマの前後に引用符を挿入できるので、先頭と末尾に["
andを追加するだけです。"]
sed 's/^/["/; s/\(,\)/"\1"/g; s/$/"]/'
例:
$ echo string1,string2,string3 | sed 's/^/["/; s/\(,\)/"\1"/g; s/$/"]/'
["string1","string2","string3"]
答え2
純粋な bash ソリューションは次のとおりです。
$ str='string1,string2,string3'
$ echo "[\"${str//,/\",\"}\"]"
["string1","string2","string3"]
このアプローチでは外部ユーティリティやサブプロセスは必要ないため、高速になるはずです。
使い方
私たちはbashのパターン置換すべてのカンマを に置き換えます","
。 は"
シェルでアクティブな文字なので、コマンド内でエスケープする必要があります。
$ echo ${str//,/\",\"}
string1","string2","string3
["
最後のステップは、文字列の先頭と"]
末尾に追加することです。つまり、次のようになります。
$ echo "[\"${str//,/\",\"}\"]"
["string1","string2","string3"]