在空格分隔的单词周围添加引号和新分隔符

在空格分隔的单词周围添加引号和新分隔符

我有以下字符串

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"
$ 

相关内容