質問: bashで標準入力をシングルクォーテーションで囲みハイフンをつけるいい方法が知りたいです。catとawkで書きましたが、このままですと長いのでより短い方法があれば教えて下さい。 ``` cat| awk '{for(i=1;i<=NF;i++)printf("'\''"$i"'\'' ,")}END{printf("\n")}' ``` 参考 * sed/awkで各文字列をシングルクォーテーション・ダブルクォーテーションで囲む | 俺的備忘録 〜なんかいろいろ〜 https://orebibou.com/2017/03/sedawk%E3%81%A7%E5%90%84%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%82%AF%E3%82%A9%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%BB%E3%83%80%E3%83%96/ > > "awkの場合 > > awkの場合だとこんな感じ。 > > > 1 > > 2 > > awk '{for(i=1;i<=NF;i++)printf("\""$i"\" ")}END{printf("\n")}' # ダブルクォーテーションの場合 > > awk '{for(i=1;i<=NF;i++)printf("'\''"$i"'\'' ")}END{printf("\n")}' # シングルクォーテーションの場合 > > blacknon@BS-PUB-UBUNTU-01:~$ echo abc def ghi | awk '{for(i=1;i<=NF;i++)printf("\""$i"\" ")}END{printf("\n")}' > > "abc" "def" "ghi" > > blacknon@BS-PUB-UBUNTU-01:~$ echo abc def ghi | awk '{for(i=1;i<=NF;i++)printf("'\''"$i"'\'' ")}END{printf("\n")}' > > 'abc' 'def' 'ghi'" > > >
回答: ハイフンじゃなくてカンマですよね?awk版と空白の扱いが異なりますが、簡単には、 ``` sed "s/[^ ][^ ]*/'&' ,/g" ``` 空白の扱いを同じにすると、末尾のカンマが欠けますが、 ``` sed "s/^ */'/;s/ *\$/'/;s/ */' ,'/g" ```