Я работаю над сценарием для конфигурирования сервера. В основном сценарий устанавливает несколько сервисов и копирует конфигурационные файлы в поместить.
Я хотел бы заменить имя пользователя в одном из конфигурационных файлов с содержанием другого файла. Входной файл является одной строкой текста, который содержит имя пользователя. Файл конфигурации имеет несколько строк текста, но только одна строка относится к имени пользователя.
Как я заменяю имя пользователя файла конфигурации с именем пользователя, сохраненным во входном файле?
Принятием фактического имени пользователя в целенаправленном файле предшествуют USER:
(в противном случае измените его в главном разделе сценария), вот решение для Python сделать задание.
Просто скопируйте сценарий в пустой файл, сохраните его как replace_username.py
и выполненный это с исходным файлом (с корректным именем пользователя) и целевой файл как аргументы:
python3 /path/to/replace_username.py <sourcefile> <destination_file>
#!/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)
Можно сохранить имя пользователя в переменной и использовании sed
для изменения configfile:
#! /bin/bash
username=$(< /path/to/username)
sed -i~ -e "s/username=XXX/username=$username/"
файл конфигурации в этом примере должен содержать строку username=XXX
. Имя пользователя не должно содержать /
(некоторые другие неалфавитно-цифровые символы могли бы быть проблематичными, также).
(Непротестированный).