文件

时间:2017-09-11 13:20:10

标签: 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.backends.mysql',
        'NAME': 'myproject',
        'USER': 'myprojectuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

我已经涉足以下问题,一行一行,但不确定这是最好的方法。我的第二个sed命令似乎也不起作用。

sed -e 's/sqlite3/mysql/g'  -e 's/'NAME':.*/'myproject'/g' 

2 个答案:

答案 0 :(得分:1)

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': '',
    }
}

答案 1 :(得分:0)

使用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': '',