linux - 如何将 Python 哈希插入 sed 查询并写入文件?

标签 linux bash sed

我正在尝试通过使用以下内容(全部在一行中,分为 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/

相关文章:

linux - 一次创建一个完整的目录树

linux - Bash shell 脚本,仅使用 & 运行脚本的特定部分

bash - 用sed除去除方括号外的所有内容,然后缩进

linux - 在 Linux 上获取进程 ID 的 Shell 脚本

bash - 从多个文件中获取字符串并复制到新文件并将文件名打印到 bash 的第二列

regex - 我将使用什么 GNU/Linux 命令行工具来执行文件的搜索和替换?

linux - 转义网址的 sed 正则表达式

linux - VNC Mac OS X 和 Linux 连接被计算机拒绝

regex - 尝试使用 BASH 删除段落中的重复项

bash - 如何使用****在命令行中隐藏密码并将值获取到.bat文件和.sh文件中