次の文字列があります
y10_zcis y10_nom y10_infl y20_zcis y20_infl y30_zcis
に変身したい
"y10_zcis", "y10_nom", "y10_infl", "y20_zcis", "y20_infl", "y30_zcis"
私は非常に醜い方法で同様のことを達成しました。
$ cat in.txt | sed 's/ /\'$'\n/g' | sed 's/\(.*\)/"\1",/g' | tr -d '\n'
"y10_zcis","y10_nom","y10_infl","y20_zcis","y20_infl","y30_zcis",
しかし、これは完全に失敗したように感じられ、必要とされない最後のコンテンツを処理しません,
(しかし、事実の後に削除する方が良いかもしれません)。
答え1
あなたはできます
sed -e 's| |", "|g' -e 's|^|"|g' -e 's|$|"|g' in.txt
どこ
's| |", "|g'
すべてのスペースを置き換えます", "
's|^|"|g'
最初はスペースがなくても行の^
先頭に指定する必要があるため、"
最初に通知します。's|$|"|g'
同じですが、各行の終わりを指定してください。$
修正する
@don_crisstiが指摘したように、以下を使用して時間を短縮できます。
sed 's| |", "|g;s|.*|"&"|'
どこ
;
各命令を分離.*
全体の行と一致します。&
この場合、右側のアンパサンドは左側から一致する完全な式に置き換えられます。.*
RHS=右
LHS=左
答え2
おそらくawk
awk -vOFS=', ' '{for (k=1; k<=NF; ++k) $k="\""$k"\""; print}' file
"y10_zcis", "y10_nom", "y10_infl", "y20_zcis", "y20_infl", "y30_zcis", "y30_nom", "y30_infl"
答え3
あなたはできます:
sed 's/\([^ ]\+\)/"\1",/g; s/,$//' file.txt
例:
% sed 's/\([^ ]\+\)/"\1",/g; s/,$//' <<<'y10_zcis y10_nom y10_infl y20_zcis y20_infl y30_zcis'
"y10_zcis", "y10_nom", "y10_infl", "y20_zcis", "y20_infl", "y30_zcis"
答え4
bashを使用していて、文字列がすでに変数にあるとします。
$ a="y10_zcis y10_nom y10_infl y20_zcis y20_infl y30_zcis"
$
これにより、次のことができます。
$ echo \"${a// /\", \"}\"
"y10_zcis", "y10_nom", "y10_infl", "y20_zcis", "y20_infl", "y30_zcis"
$