我正在尝试通过使用以下内容(全部在一行中,分为 3 行以便于阅读)同时使用 sed 和 Python 将 HASH 添加到配置文件中:
sed "s/SECRET_KEY.*/SECRET_KEY = $(python -c 'import crypt,getpass;
print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA256)))')/"
settings.py > settings.tmp
我不断收到此标准输出消息:
sed: -e expression #1, char 60: unknown option to `s'
但是,当我运行时:
sed "s/SECRET_KEY.*/SECRET_KEY = $(python -c 'import crypt,getpass;
print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA256)))')/"
settings.py |grep -i secret
它似乎返回以下内容:
SECRET_KEY = $5$EQq9GhgCBcL7P5kN$hnwmvYe7lBhJOxHJx768VdCjLOxpnRuTWkkzGycNP.B
为什么不写入文件就可以工作,但如果我写入文件就不行?
最佳答案
问题是您不能保证您的SECRET_KEY
不包含/
字符。第 60 列在 key 中。
因为你没有为你的两个测试输入相同的密码,第二个测试只是运气,但第一个失败了,因为你的 python 表达式评估为一个包含 /
的 key ,丢失 sed
。
为什么不用 python 代替,因为你已经在使用它了?
substkey.py
脚本:
import sys,re
import crypt,getpass
passwd = crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA256))
with open(sys.argv[1],"r") as f:
contents=f.read()
new_contents = re.sub("SECRET_KEY.*",'SECRET_KEY = "'+passwd+'"',contents)
print(new_contents)
用法:
substkey.py settings.py > settings.tmp
它要求输入密码并插入 key (我添加了引号,因为如果它最后是一个 python 脚本,则需要它:))
关于linux - 如何将 Python 哈希插入 sed 查询并写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39734682/