Ok, primeiro, tr
funciona um caractere por vez, não é possível substituir um ,
por um \|
(de um a dois caracteres). Então, use sed
: sed -e 's/,/\|/'
Dois, você pode combinar o grep
e o sed
s, isso parece funcionar no Bash, com o GNU sed:
$ LST=$(sed -n '/^LST *=/ {s/^LST *= *//; s/, */\|/g; p}' config.ini)
$ echo "$LST"
fr\|de\|pl\|ru\|ch\|us\|uk\|ca
(Isso basicamente diz: Em todas as linhas que combinam /^LST *=/
, faça as coisas entre chaves: dois s
ubstitutions e p
rint a linha.)
Três, com o seu tr
, você deve ter as vírgulas alteradas para barras invertidas ou canos, dependendo se a cotação funciona ou não, ou seja,
$ echo "fr,de,pl" | tr , "\|"
fr|de|pl
$ echo "fr,de,pl" | tr , '\|'
fr\de\pl
Mas você não fez nada em vez disso. Não consigo reproduzir isso com o Bash, mas a sintaxe set
parece com csh
e obtenho um comportamento estranho com tcsh
. Em alguns casos. Nem todos.
Ok:
$ tcsh
> echo "fr,de,pl" | sed 's/,/\|/'
fr\|de,pl
> set LST = 'echo "fr,de,pl" | sed 's/,/\|/''
> printf "%s\n" "$LST"
fr\|de,pl
Não tão bem:
$ tcsh
> echo "fr,de,pl" | sed 's/, */\|/'
fr\|de,pl
> set LST = 'echo "fr,de,pl" | sed 's/, */\|/''
> printf "%s\n" "$LST"
fr|de,pl
A única diferença que consigo ver é o asterisco no segundo caso.