![Python リストのような文字列変換](https://rvso.com/image/154483/Python%20%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E6%96%87%E5%AD%97%E5%88%97%E5%A4%89%E6%8F%9B.png)
「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"]