Este script BASH funciona conforme o esperado. Eu tenho uma variável ($foo) que contém linhas de dados, digo ao bash para separar em novas linhas e faço um loop pela variável.
#!/bin/bash
foo="
Original Line1
Original Line2
Original Line3
"
IFS=$'\n'
for line in $foo
do
echo $line
done
Como esperado, os dados estão em sua própria linha.
Original Line1
Original Line2
Original Line3
Eu adiciono esta linha ao script, para substituir o texto "Line2" por "EXAMPLE" na variável $foo.
foo=$( echo $foo | sed "s|Line2|EXAMPLE|" )
Quando executo o script, os dados não são mais separados em sua própria linha e, em vez disso, são impressos em uma única linha. Não tenho certeza de como posso substituir valores em uma variável e reter novas linhas.
Original Line1 Original EXAMPLE Original Line3
Sua variável sem aspas
$foo
está sujeita à divisão de palavras pelo shell, conforme explicado em detalhes em Por que meu script de shell engasga com espaços em branco ou outros caracteres especiais? .Usar aspas impedirá que:
Observe que você realmente não precisa
sed
de uma substituição tão simples - você pode usar a substituição do shell