Substituir valores em uma variável e manter novas linhas no BASH

0

Este script BASH funciona como esperado. Eu tenho uma variável ($ foo) que contém linhas de dados, eu digo bash para separar em novas linhas, e eu loop através da 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 sei como posso substituir valores em uma variável e manter novas linhas.

Original Line1 Original EXAMPLE Original Line3
    
por JeremyCanfield 11.10.2018 / 14:13

1 resposta

1

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 sufoca em espaços em branco ou outros caracteres especiais? .

O uso de cotações impedirá isso:

echo "$foo" | sed "s|Line2|EXAMPLE|"

Note que você realmente não precisa de sed para uma substituição tão simples - você pode usar a substituição de shell

foo="${foo/Line2/EXAMPLE}"
    
por 11.10.2018 / 14:39