cant: Como substituir a linha variável se encontrada ou anexada ao final do arquivo, se não for encontrada?

1

Então, minha pergunta é muito baseada em um , mas tem uma diferença fundamental.

Na resposta dada de:

sed '/^FOOBAR=/{h;s/=.*/=newvalue/};${x;/^$/{s//FOOBAR=newvalue/;H};x}' infile

Eu fiz uma variação que funciona para fazer FOOBAR uma variável (por exemplo, nome de um programa e depois colocá-lo em um loop for para fazer uma lista de programas e seu status de instalação). Isto é para um projeto bastante envolvido que estou trabalhando para tornar fácil a instalação do Drawile para Raspberry Pi com alguns novos recursos, mas essa é uma lata de worms diferente na qual não vou entrar.

sed -i '/^'"$FOOBAR"'=/{h;s/=.*/=newvalue/};${x;/^$/{s//'"FOOBAR"'=newvalue/;H};x}' infile

Eu gostaria que newvalue fosse uma $ variável que pudesse mudar no script. Eu simplesmente não consigo descobrir como fazer esse trabalho, simplesmente usando 'e' não faz direito. Eu passei horas navegando e tentando ler tutoriais , mas eu não entendo o suficiente e mergulhei muito profundamente no funcionamento interno do sed. Na maioria das vezes, essa variável será algo simples como: sim, não, ou erro.No entanto, eu também poderia usá-lo para representar caminhos de pastas e arquivos ... por isso estou preocupado com / substituições também aqui.Mesmo que não seja uma resposta completa, fico feliz em descobrir isso por mim mesmo como eu posso ser apontado na direção que eu preciso ir para entender isso melhor.

Edit: Não há muito para postar, pois há algo fundamental que tenho certeza de que estou perdendo, acabei de tentar variações de colocar aspas em torno de newvalue. Como segue ...

sed -i '/^FOOBAR=/{h;s/=.*/=$newvalue/};${x;/^$/{s//FOOBAR=$newvalue/;H};x}' infile

Saída: FOOBAR = $ newvalue Isso está incorreto. Deve produzir o valor armazenado para novo valor!

sed -i '/^FOOBAR=/{h;s/=.*/="$newvalue"/};${x;/^$/{s//FOOBAR="$newvalue"/;H};x}' infile

Saída: FOOBAR="$ newvalue" Isso está incorreto. Deve produzir o valor armazenado para novo valor!

sed -i '/^FOOBAR=/{h;s/=.*/='"$newvalue"'/};${x;/^$/{s//FOOBAR='"$newvalue"'/;H};x}' infile

Saída: sed: -e expressão # 1, char 30: opção desconhecida para 's'

Se newvalue for igual a Yes, eu gostaria que a saída fosse "FOOBAR = Yes" ou possivelmente um caminho de pasta.

Editar 2: Pode ser qualquer coisa, na verdade, desde que funcione. Eu não sou particular sobre isso, mas eu provavelmente tenho mais experiência com o uso de sed, então é isso que eu continuo procurando usando ...

Editar 3: Encontrou a resposta.

sed -i '\!^'"$FOOBAR"'=!{h;s!=.*!='"$newvalue"'!};${x;\!^$!{s!!'"$FOOBAR"'='"$newvalue"'!;H};x}' /home/pi/Public/test.txt
    
por Wade S 25.09.2018 / 09:02

0 respostas