substituir uma linha de texto complexo dentro de um número de arquivos

0

Eu tenho um monte de arquivos chamados Linux em várias sub-pastas onde a linha inteira

DSY_OS_Release='lsb_release --short --id |sed 's/ //g''

precisa ser substituído por

DSY_OS_Release="RedHatEnterpriseWorkstation"

Como posso conseguir isso usando a linha de comando?

Eu sei que isso soa como uma pergunta duplicada, mas não encontrei nenhuma resposta que funcionasse para minha string complexa.

    
por thengineer 29.09.2017 / 11:58

1 resposta

2

Se você não precisa coincidir com a linha inteira, basta usar

sed 's/^DSY_OS_Release=.*/DSY_OS_Release="RedHatEnterpriseWorkstation"/'

Dependendo da implementação do sed , você pode usar sed -i '...' file ou talvez seja necessário redirecionar para um novo arquivo e substituir o original posteriormente.

Quanto a como executar isso em um conjunto de arquivos: Se todos os arquivos corresponderem a um padrão específico, como *.config , então (assumindo o GNU sed ):

find /some/path -type f -name '*.config' \
    -exec sed -i '...as above...' {} \;
    
por 29.09.2017 / 12:02