我构建了一个小脚本,可以从标准的django设置中创建一个副本。复制项目后,我想替换SECRET_KEY
。原始SECRET_KEY
和替换都包含许多特殊字符。我的shell代码如下所示:
SECRET=$(python -c 'from random import choice; import sys; sys.stdout.write("".join([choice("abcdefghijklmnopqrstuvwxyz0123456789^&*(-_=+)") for i in range(50)]))')
sed --in-place "s/^SECRET_KEY = .*/SECRET_KEY = '${SECRET}'/" src/settings.py
当我运行它时,它有时会起作用,但在大多数情况下,结果看起来像这样:
SECRET_KEY = '*n(hbp+o31v*d3pSECRET_KEY = '=ih8(6hwlqiamvg88_jtatqi1w2^axl=+omrpwck*aena-c3ax'8gpv8SECRET_KEY = '=ih8(6hwlqiamvg88_jtatqi1w2^axl=+omrpwck*aena-c3ax'8bwc4ele+bk(*+)vv4tSECRET_KEY = '=ih8(6hwlqiamvg88_jtatqi1w2^axl=+omrpwck*aena-c3ax'*qscez(f'
我不知道所有这些垃圾来自哪里,但我想它与原始SECRET_KEY
中的特殊字符或解释为正则表达式特殊字符的替换有关。知道如何摆脱这个吗?
答案 0 :(得分:2)
正则表达式逃脱你的秘密生成器,你应该没事:
使用re.escape。
SECRET=$(python -c 'import re;from random import choice; import sys; sys.stdout.write(re.escape("".join([choice("abcdefghijklmnopqrstuvwxyz0123456789^&*(-_=+)") for i in range(50)])))')