我有这个
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
。我可以以某种方式更改它并使用锚点^
和$
来获取字符串的第一部分和最后一部分,并在其中添加"
吗?
答案 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')
[[:space:]]\{1,\}
POSIX BRE模式(等于[[:space:]]+
POSIX ERE)匹配一个或多个空格字符,替换模式中的&
将此匹配的值重新插入结果字符串中。 / p>