![如何用另一个文件的输入替换文本字符串](https://linux22.com/image/1122745/%E5%A6%82%E4%BD%95%E7%94%A8%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E8%BE%93%E5%85%A5%E6%9B%BF%E6%8D%A2%E6%96%87%E6%9C%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我正在编写一个用于配置服务器的脚本。基本上,该脚本会安装几个服务并将配置文件复制到位。
我想用另一个文件的内容替换其中一个配置文件中的用户名。输入文件是一行包含用户名的文本。配置文件有多行文本,但只有一行涉及用户名。
如何使用输入文件中存储的用户名替换配置文件的用户名?
答案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
。用户名不应该包含/
(其他一些非字母数字字符也可能有问题)。
(未经测试。)