sed/awkで各文字列をシングルクォーテーション・ダブルクォーテーションで囲む

コンソール上でスペース区切りになっている各文字列をシングルクォーテーション・ダブルクォーテーションで囲みたいことがあったので、その対応について備忘。
以下のようにコマンドを実行することで、スペース区切りの各単語を囲むことができる。

sedの場合

sedで各単語を囲む場合、以下のようにコマンドを実行する。

sed 's/[^ ]\+/"&"/g' # ダブルクォーテーションの場合
sed 's/[^ ]\+/'\''&'\''/g' # シングルクォーテーションの場合
blacknon@BS-PUB-UBUNTU-01:~$ echo abc def 123 ABC | sed 's/[^ ]\+/"&"/g'
"abc" "def" "123" "ABC"
blacknon@BS-PUB-UBUNTU-01:~$ echo abc def 123 ABC | sed 's/[^ ]\+/'\''&'\''/g'
'abc' 'def' '123' 'ABC'
Sponsored Links

awkの場合

awkの場合だとこんな感じ。

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'

 

2017/03/03 23:00

@ebanさんに、awkでもgsubで&を使って、sedのように記述できると教えてもらった。(知らなかった…)
エスケープでもうまくできないか試してみたけど、なんか汚くなっちゃう。アスキーコードで指定するのがいいみたいだ。

echo abc def ghi | awk '{gsub(/[^ ]+/,"\x22&\x22");print}'
echo abc def ghi | awk '{gsub(/[^ ]+/,"\x27&\x27");print}'
blacknon@BS-PUB-UBUNTU-01:~$ echo abc def ghi | awk '{gsub(/[^ ]+/,"\x22&\x22");print}'
"abc" "def" "ghi"
blacknon@BS-PUB-UBUNTU-01:~$ echo abc def ghi | awk '{gsub(/[^ ]+/,"\x27&\x27");print}'
'abc' 'def' 'ghi'

 

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*