Como substituir uma string de texto pela entrada de outro arquivo

0

Estou trabalhando em um script para configurar um servidor. Basicamente, o script instala vários serviços e copia os arquivos de configuração para serem colocados.

Eu gostaria de substituir o nome de usuário em um dos arquivos de configuração pelo conteúdo de outro arquivo. O arquivo de entrada é uma linha de texto que contém o nome de usuário. O arquivo de configuração tem várias linhas de texto, mas apenas uma linha se refere ao nome de usuário.

Como substituo o nome de usuário do arquivo de configuração pelo nome de usuário armazenado no arquivo de entrada?

    
por Steven Brian 26.10.2014 / 20:26

2 respostas

0

Supondo que o nome de usuário real no arquivo de destino é precedido por USER: (se não, altere-o na seção head do script), aqui está uma solução python para fazer o trabalho.

Basta copiar o script em um arquivo vazio, salvá-lo como replace_username.py e executá-lo com o arquivo de origem (com o nome de usuário correto) e o arquivo de destino como argumentos:

python3 /path/to/replace_username.py <sourcefile> <destination_file>

O script:

#!/usr/bin/env python3

import sys

source = sys.argv[1]       # the file with the password you want to insert
destination = sys.argv[2]  # the targeted configuration file
prefix="USER:"             # prefix, check if it is exactly as in your files

with open(source) as src:
    name = src.read().strip()

with open(destination) as edit:
    lines = edit.readlines()

for i in range(len(lines)):
    if lines[i].startswith(prefix):
        lines[i] = prefix+name+"\n"

with open(destination, "wt") as edit:
    for line in lines:
        edit.write(line)
    
por Jacob Vlijm 26.10.2014 / 21:09
0

Você pode salvar o nome de usuário em uma variável e usar sed para alterar o arquivo de configuração:

#! /bin/bash
username=$(< /path/to/username)
sed -i~ -e "s/username=XXX/username=$username/"

O arquivo de configuração neste exemplo deve conter a linha username=XXX . O nome de usuário não deve conter / (alguns outros caracteres não-alfanuméricos podem ser problemáticos também).

(não testado)

    
por choroba 26.10.2014 / 20:39