如何在Shell脚本中用逗号替换变量中的换行符

时间:2020-09-08 17:35:26

标签: linux shell

我有一个变量foo。

echo“ print foo”“ $ foo” --->一个 b c

预期输出: 我希望输出像下面这样用逗号分隔

a,b,c

我尝试了foo | grep'^>'| sed -e“ s / ^> /,/”

,但是它在前面附加了逗号。 结果: ,a,b,c

错了。

2 个答案:

答案 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//\ /,}"