如何用另一个文件的输入替换文本字符串

如何用另一个文件的输入替换文本字符串

我正在编写一个用于配置服务器的脚本。基本上,该脚本会安装几个服务并将配置文件复制到位。

我想用另一个文件的内容替换其中一个配置文件中的用户名。输入文件是一行包含用户名的文本。配置文件有多行文本,但只有一行涉及用户名。

如何使用输入文件中存储的用户名替换配置文件的用户名?

答案1

假设目标文件中的实际用户名前面有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)

答案2

您可以将用户名保存在变量中并使用它sed来更改配置文件:

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

本例中的配置文件应该包含行username=XXX。用户名不应该包含/(其他一些非字母数字字符也可能有问题)。

(未经测试。)

相关内容