verifique o seguinte script
$ cat run.sh
#!/bin/bash
echo example 1
for i in a b c; do echo "${i},"; done
echo example 2
for i in a b c; do echo "${i},"; done|sed '$s/,//'
echo example 3
for i in a b c; do echo "${i}"; done|sed '$!s/$/,/'
echo example 4
SEP=''; for i in a b c; do printf "${SEP}${i}"; SEP=',\n'; done; printf '\n'
echo example 5
STR=''; SEP=''; for i in a b c; do STR="${STR}${SEP}${i}"; SEP=,; done; echo $STR
echo example 6
echo 'a,b,c,'||sed 's/^\(.*\),\(^,\)*$//'
echo example 7
echo 'a,b,c,'|sed 's/.\w*$//'
Fornece a seguinte saída
$ . run.sh
example 1
a,
b,
c,
example 2
a,
b,
c
example 3
a,
b,
c
example 4
a,
b,
c
example 5
a,b,c
example 6
a,b,c
example 7
a,b,c
exemplo 1: nosso loop for realmente produz linhas. O echo $x
transforma isso em uma única linha.
exemplo 2: você pode dizer ao sed para processar apenas a última linha
exemplo 3: você pode dizer ao sed para processar todos menos a última linha
exemplo 4: você pode programar o loop for que você faz algum processamento especial quando ele é ececutado na primeira vez: não prefixar ', \ n' na linha. Mas em muitos casos você não sabe quando é expulso da última vez
exemplo 5: o mesmo do exemplo 4, mas você não produz linhas, mas simplesmente uma string
exemplo 6: diga ao sed para remover a última ocorrência de uma string em uma linha
exemplo 7: diga ao sed para remover o último caractere sem espaço em branco de uma linha