Um script gera arquivos de log com dezenas de quilolinhas e a maioria das linhas são muito longas. Seria ótimo tornar este registro amigável para humanos com algumas edições.
No tempo de execução, existem variáveis de ambiente úteis. Diga, ${X}
corresponde a
/usr/projects/draco/vendors/spack.tt.developmental/spack.tt.2017-12-06.with-flags/opt/spack/cray-CNL-haswell/intel-17.0.4/gsl-2.4-zagfxq3p5iorh7viw4gc24bwzlx2tyk7
Meu objetivo é usar as variáveis de ambiente para encontrar linhas como
Leaving directory /usr/projects/draco/vendors/spack.tt.developmental/spack.tt.2017-12-06.with-flags/opt/spack/cray-CNL-haswell/intel-17.0.4/gsl-2.4-zagfxq3p5iorh7viw4gc24bwzlx2tyk7
e substitua-os por um espaço reservado conveniente, aquigsl-install
Leaving directory gsl-install
Meus esforços incluem uma sintaxe malsucedida como esta
sed -i -e 's/${X}/gsl-install/g' tedious.log
Como posso fornecer sed
uma variável de ambiente e substituir as strings correspondentes?
$ uname -a
Darwin ***.***.*** 16.7.0 Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64 x86_64
voce tem dois problemas
Você pode usar qualquer caractere como um
sed
delimitador de comando. Escolha algo que provavelmente não esteja em sua string de pesquisa. E use aspas duplas em seused
comando.Por exemplo:
Para usar variáveis bash em um script sed, você precisa sair das aspas simples, adicionar a variável entre aspas duplas e voltar para aspas simples para sed.
Exemplo abaixo: