Awk SED文件的更新部分

Awk SED文件的更新部分,awk,sed,Awk,Sed,尝试使用SED使用新值更新settings.py文件 原文部分 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } 它应该是什么样子 DATABASES = { 'default': { 'ENGINE': 'django.db.backend

尝试使用SED使用新值更新settings.py文件

原文部分

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
它应该是什么样子

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'myproject',
        'USER': 'myprojectuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}
我已经涉猎了以下内容,一行一行地做,但不确定这是最好的方法。另外,我的第二个sed命令似乎不起作用

sed -e 's/sqlite3/mysql/g'  -e 's/'NAME':.*/'myproject'/g' 
awk解决方案:

awk 'function pr(sp, k, v){    # prints key-value pair with indentation
         printf "%s\047%s\047: \047%s\047,\n",sp,k,v; 
     }
     /sqlite/{ sub(/sqlite[0-9]*/,"mysql",$0) }
     /NAME/{ sp=substr($0,1,index($0,"\047")-1); 
             print sp$1" \047myproject\047,"; 
             pr(sp,"USER","myprojectuser"); pr(sp,"PASSWORD","password"); 
             pr(sp,"HOST","localhost"); pr(sp,"PORT",""); next 
     }1' settings.py
输出:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'myproject'
        'USER': 'myprojectuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}
使用sed:

sed '/\x27ENGINE\x27: \x27django.db.backends.sqlite3\x27,/!b;N;g;r out' input
out
文件的内容应为:

    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'myproject',
    'USER': 'myprojectuser',
    'PASSWORD': 'password',
    'HOST': 'localhost',
    'PORT': '',

您不能在
'内部使用
'
,请改用
\x27
。。。您需要使用back引用或在替换时手动添加
'NAME':
字符串。。。当只有一次替换时,不需要使用
g
修饰符谢谢,所以我现在有以下内容。sed-e's/sqlite3/mysql/g'-e/\x27NAME\x27:.*/\x27NAME\x27:\x20\x27myproject\x27\x2c/g'如何在'NAME'之后开始添加新行:'我尝试了以下操作:sed-e's/sqlite3/mysql/g'-e's/\x27NAME\x27:.*/\x27NAME\x27:\x20\x27myproject\x27\x27\x27\x27\x2c/g'-I'/x27NAME\x27:/a\line1\line2'最好将该代码添加到问题中编辑为。。。从评论中不清楚。。。要添加新行,
一个
命令就可以了。。或者将要添加的行保存到文件中,然后使用
r
命令。。。这些命令的
\n
和语法的使用将取决于您的
sed
版本。。。因此,请将该细节添加到问题以及更有趣的答案中。感谢Roman,一条注释是名称行没有结尾逗号。@Ankh2054,好的,修复了它从
引擎
行替换到文件末尾的问题吗?