我正在开发一个Django项目,我已经创建了 makefile 任务来重置我的数据库设置(即 reset-db
) 。
但是,由于我只想syncdb
核心应用程序,我需要能够切换对旧版应用程序行的评论。在syncdb
之前评论并在之后取消评论(因此其他操作正常发生)。
INSTALLED_APPS = (
…
'django_extensions',
'core',
'legacy' # @reset-db
)
INSTALLED_APPS = (
…
'django_extensions',
'core',
# 'legacy' # @reset-db
)
reset-db
目前的任务是
reset-db:
# cmd to comment line
DJANGO_SETTINGS_MODULE=${SETTINGS} sudo -u postgres -H dropdb evrpa \
&& sudo -u postgres -H createdb evrpa -O elopez; \
./manage.py syncdb --noinput --database=default;
# cmd to UNcomment line
那么sed
或awk
命令是做什么的?
答案 0 :(得分:1)
只需获取原始文件的副本,进行修改,使用,然后将其恢复:
mv ${SETTINGS_PY} ${SETTINGS_PY}.tmp &&
sed '/@reset-db/s/^/#/' ${SETTINGS_PY}.tmp > ${SETTINGS_PY} &&
./manage.py syncdb --noinput --database=default &&
mv ${SETTINGS_PY}.tmp ${SETTINGS_PY}
通过这种方式,您不必提供脚本来尝试将修改后的文件恢复为原始内容,因为您有要恢复的原始文件的副本。
我认为你有充分的理由不引用你的变量,所以我也没有引用它们。
我在每一行的末尾添加了&&
,因为您总是希望在执行下一个命令之前测试上一个命令。如果在makefile中没有正确的语法,请根据需要进行更改。
答案 1 :(得分:0)
以下是我的表现
awk '/@reset-db/{ $0="# " $0 } {print}' ${SETTINGS_PY} > ${SETTINGS_PY}.tmp
/@reset-db/
匹配的行,我使用#
为{ $0="# " $0 }
添加前缀,以更新行内容。 {print}
打印所有行。awk '/^# .*@reset-db/{ $0=gensub(/^#(.*)/, "\\1", "", $0) } {print}' ${SETTINGS_PY} > ${SETTINGS_PY}.tmp
/^# .*@reset-db/
匹配的行,我使用#
删除{ $0=gensub(/^#(.*)/, "\\1", "", $0) }
来更新当前行内容。 {print}
打印所有行。 注意:您需要使用其他$
转义 makefile 脚本中的$
(例如 {{ 1}}→$0
)。
$$0