sed在django设置文件中替换SECRET_KEY,引入垃圾

时间:2013-04-03 08:54:56

标签: sed

我构建了一个小脚本,可以从标准的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中的特殊字符或解释为正则表达式特殊字符的替换有关。知道如何摆脱这个吗?

1 个答案:

答案 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)])))')