Qual é a melhor maneira de editar um arquivo com um script bash?

4

Usando / bin / bash no RHEL 5.8 e quero automatizar a edição de um arquivo. Eu preciso do script para pesquisar o arquivo e substituir uma linha no arquivo. Exemplo de linha:

Other line
Current date 01121990
Other line

Pesquise por esta linha e substitua a string de data por uma data predeterminada. Não consigo ecoar para um novo arquivo e inserir minha data, pois esse arquivo será copiado de um arquivo específico do servidor. Obrigado!

    
por Paul 20.03.2016 / 00:14

2 respostas

14
your_date='your desired date'
sed -i "s/^Current date.*/Current date ${your_date}/" /path/to/file

Essa é a maneira mais fácil. Isso pressupõe que todas as linhas que contém uma data para substituir também são as únicas linhas para iniciar com 'Data atual'.

Observe que o nível de usuário que executa esse comando também deve ter permissão para editar esse arquivo.

-i significa edição inline, o que significa que você está editando o arquivo diretamente.

^Current date.*

Significa todas as linhas que começam com: Data atual e terminando em qualquer coisa. Em outras palavras, substitua a linha inteira pelo que está na segunda parte /.../ do objeto sed.

Double "são usados em torno da instrução sed para que as variáveis sejam usadas como variáveis, não como strings.

    
por 20.03.2016 / 00:22
1

ed pode fazer edição de arquivos no local como bem! O número do inode do arquivo editado permanece inalterado.

file='/path/to/file'
your_date='your desired date'
ls -i "$file"
printf '%s\n' H ",g/^Current date.*/s//${your_date}/" wq | ed -s "$file"
ls -i "$file"
    
por 21.03.2016 / 13:38