我有以下字符串
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"
$