使用sed将逗号分隔列表转换为逗号分隔列表,并在每个元素周围加上引号

我有这个

a/b/Test b/c/Test c/d/Test

并希望将其转换为:

"a/b/Test","b/c/Test","c/d/Test"

我知道我可以使用它(在这里:path=a/b/Test b/c/Test c/d/Test

test=$(echo $path | sed 's/ /","/g')

将其转换为

a/b/Test","c/d/Test

但是在这里,我缺少第一个和最后一个"

我不太了解如何使用sed。我可以以某种方式更改它并使用锚点^$来获取字符串的第一部分和最后一部分,并在其中添加"吗?

chenhui651 回答:使用sed将逗号分隔列表转换为逗号分隔列表,并在每个元素周围加上引号

sed  's/.*/"&"/g ; s/ /","/g' filename
,

您可以使用awk

s='a/b/Test b/c/Test c/d/Test'
awk -v OFS=',' '{for (i=1; i<=NF; i++) $i = "\"" $i "\""} 1' <<< "$s"

"a/b/Test","b/c/Test","c/d/Test"
,

更容易:

awk -v OFS="," -v q='"' '{for(i=1;i<=NF;i++)$i=q $i q}7'
,

如果您只有一行文字,则可以只添加双引号

test="a/b/Test b/c/Test c/d/Test"
test='"'$(echo "$test" | sed 's/[[:space:]]\{1,\}/",&"/g')'"'
echo "$test"

请参见online demo

如果您有多行,请使用

test=$(echo "$test" | sed 's/[[:space:]]\{1,&"/g; s/^/"/g; s/$/"/g')
test=$(echo "$test" | sed -E 's/[[:space:]]+/",&"/g; s/^|$/"/g')

请参见this online demo

[[:space:]]\{1,\} POSIX BRE模式(等于[[:space:]]+ POSIX ERE)匹配一个或多个空格字符,替换模式中的&将此匹配的值重新插入结果字符串中。 / p>

本文链接:https://www.f2er.com/3145923.html

大家都在问