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

时间:2019-11-07 09:58:41

标签: bash shell 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", "b/c/Test", "c/d/Test

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

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您可以使用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"

答案 2 :(得分:0)

更容易:

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

答案 3 :(得分:0)

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

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>