Use sed para substituir linha de texto por nova linha incluindo variável

1

Eu estava olhando para esta solução: Usando sed para editar linhas em um arquivo com uma variável e tentei aplique-o à minha situação, mas só recentemente descobri sed e ainda não o peguei.

Se eu tiver um arquivo localizado /tmp/mary.txt e se parece com isso:

Mary had a little lamb
with fleece as white as
snow. Everywhere that
Mary went, the lamb was
sure to go.

Eu quero substituir uma linha de texto neste arquivo, especificamente:

Mary had a little lamb - > Mary had 2 little lambs

Eu usei isso:

sed -i 's/*.had a little lamb.*/Mary had $(nproc) little lambs/' /etc/mary.txt

Estou usando -i para inplace e s/ para substituto e isso gera um erro:

sed: 1: "mary.txt": extra characters at the end of g command

A outra coisa que estou tentando fazer é substituir a palavra "lamb" na primeira linha pelo resultado de echo $PATH

sed -i 's/*.had a little lamb.*/ Mary had a little '$(echo $PATH)'/' /etc/mary.txt

Isso gera o mesmo erro acima. Eu sei que estes são dois cenários diferentes, mas pode ser mostrado para mim o que eu fiz de errado, então eu posso usar isso no futuro.

    
por Danijel-James W 28.02.2014 / 16:35

2 respostas

4

Use aspas duplas para que o var seja avaliado corretamente:

$ var=43
$ sed "s/.*had a little lamb.*/Mary had $var little lambs/" file
Mary had 43 little lambs
with fleece as white as
snow. Everywhere that
Mary went, the lamb was
sure to go.

Veja a resposta de Jacob Minshall sobre o .* em vez de *. . Eu tinha escrito o comando sed do zero, então não notei o erro no código original.

    
por 28.02.2014 / 16:40
2

Eu acho que é porque você tem *. no começo, mas você quer ter .*

significa qualquer caractere, enquanto o * significa zero ou mais do caractere precedente, que não é um dos

    
por 28.02.2014 / 16:40