在linux bash中替换字符串

时间:2016-09-14 05:57:26

标签: bash sed

我正在编写一个bash脚本,用于自动安装带有postgresql数据库的django。 现在,我想通过命令替换数据库名称,因为它使用的是sqlite3数据库文件路径。

我写了这个命令:

sudo sed -i 's/os.path.join(BASE_DIR, 'db.sqlite3'),/'$project_name',/g' $projects_name/settings.py

但是当我制作django项目时,这并没有改变。

如何改变这一点,请帮助我。

2 个答案:

答案 0 :(得分:2)

sed附近使用双引号进行变量扩展&保留单引号。

sed -i "s/os.path.join(BASE_DIR, 'db.sqlite3'),/$project_name,/g" "$project_name/settings.py"

GNU sed version 4.2.1

上测试工作正常

答案 1 :(得分:1)

您应该转义'db.sqlite3'中的引号:

sudo sed -i 's/os\.path\.join(BASE_DIR, '\''db\.sqlite3'\''),/'$project_name',/g' $projects_name/settings.py

您的sed模式为os.path.join(BASE_DIR, db.sqlite3),,因为'db.sqlite3'中的引号不会被解释为文字'。相反,他们关闭并重新打开sed命令。