luf*_*ffe 3 sed text-processing regular-expression
我有以下字符串
y10_zcis y10_nom y10_infl y20_zcis y20_infl y30_zcis
Run Code Online (Sandbox Code Playgroud)
我想将其转换为
"y10_zcis", "y10_nom", "y10_infl", "y20_zcis", "y20_infl", "y30_zcis"
Run Code Online (Sandbox Code Playgroud)
我用极其丑陋的方式完成了类似的事情:
$ 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",
Run Code Online (Sandbox Code Playgroud)
但这感觉完全失败了,它没有处理最后一个不需要的,
(但也许最好在之后删除)
你可以做
sed -e 's| |", "|g' -e 's|^|"|g' -e 's|$|"|g' in.txt
Run Code Online (Sandbox Code Playgroud)
在哪里
's| |", "|g'
将用 ", "
's|^|"|g'
而开头没有空格,您必须^
在行的开头指定,所以您要告诉,放在"
开头。's|$|"|g'
同样的事情,但指定每一行的结尾 $
更新
正如@don_crissti 指出的那样,您可以使用以下方法缩短它的时间
sed 's| |", "|g;s|.*|"&"|'
Run Code Online (Sandbox Code Playgroud)
在哪里
;
分开每条指令.*
匹配整行。&
在这种情况下,RHS 上的 & 符号被 LHS 上匹配的整个表达式替换 .*
RHS=右手边
LHS=左侧
也许 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"
Run Code Online (Sandbox Code Playgroud)