如何使用 sed 或任何其他方法仅替换 magento envfile 中的 dbpassword

问题描述

我想使用脚本替换 magento envfile 中的 dbpassword。我尝试使用 sed 命令,它替换了两个密码字段。例如:

<?PHP
return [
   
    ],'db' => [
        'table_prefix' => '','connection' => [
            'default' => [
                'host' => '127.0.0.1','dbname' => '','username' => '','password' => '',]
            ]
        ]
    ],'x-frame-options' => 'SAMEORIGIN','MAGE_MODE' => 'production','session' => [
        'save' => 'redis','redis' => [
            'host' => '127.0.0.1','port' => '6379',]

我在脚本中尝试了以下 sed 命令,它替换了 db 和 reddis 密码。

sed -r '/password/ s/(^.*)(=>.*)/\1 => '"'"$pass"'"',/g' testfile1.txt 

如何仅替换 db 数组中的密码字段。在这种情况下,带有行号和实例计数的 sed 用法没有帮助,因为这在不同情况下可能会有所不同。

解决方法

我会在这里使用 AWK,类似于以下 replace-password-in-db.awk

#!/usr/bin/awk -f

BEGIN {
    replace_next_password = 0
}

/\s+'db' => \[/ {
    replace_next_password = 1
    print
    next
}

/\s+'password' =>/ && replace_next_password {
    gsub(/'',$/,"'" new_pass "',")
    print
    replace_next_password = 0
    next
}

1

用法:

$ awk  -v new_pass="my-new-pass-is-here" -f ./replace-password-in-db.awk php
<?php
return [

],'db' => [
    'table_prefix' => '','connection' => [
    'default' => [
        'host' => '127.0.0.1','dbname' => '','username' => '','password' => 'my-new-pass-is-here',]
    ]
    ]
],'x-frame-options' => 'SAMEORIGIN','MAGE_MODE' => 'production','session' => [
    'save' => 'redis','redis' => [
    'host' => '127.0.0.1','port' => '6379','password' => '',]