我有一个变量foo。
echo“ print foo”“ $ foo” --->一个 b c
预期输出: 我希望输出像下面这样用逗号分隔
a,b,c
我尝试了foo | grep'^>'| sed -e“ s / ^> /,/”
,但是它在前面附加了逗号。 结果: ,a,b,c
错了。
答案 0 :(得分:2)
使用bash:
foo='a
b
c'
joined="${foo//$'\n'/,}"
echo "$joined"
a,b,c
为便于携带,请使用破折号:
IFS="
" # just a quoted newline
set -f # turn off filename expansion
set -- $foo
IFS=,
joined="$*"
echo "$joined"
这可以做成一个函数:
join_lines() {
local IFS=${1:-,}
set --
while IFS= read -r line; do set -- "$@" "$line"; done
echo "$*"
}
所以你可以做
echo "$foo" | join_lines # => a,b,c
echo "$foo" | join_lines "|" # => a|b|c
或者,sed
echo "$foo" | sed -n "s/^/'/; s/\$/',/; H; \$ {g; s/\n//g; s/,\$//; p;}"
答案 1 :(得分:0)
使用逗号替换空格:
echo "$foo" | sed -e 's/\ /,/g'
您甚至不需要使用sed,这是bash replacement构造(请在 Substring Replacement 主题下查看):
echo "${foo//\ /,}"