【问题标题】:Need a script to edit file需要一个脚本来编辑文件
【发布时间】:2011-12-25 16:46:22
【问题描述】:
<?php
class DATABASE_CONFIG {
    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'hostname',
        'login' => 'username',
        'password' => 'password',
        'database' => 'database_name',
        'prefix' => '',
        //'encoding' => 'utf8',
    );
    public $test = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'hostname',
        'login' => 'username',
        'password' => 'password',
        'database' => 'database_name',
        'prefix' => '',
        //'encoding' => 'utf8',
    );
}

登录名、密码和数据库中有一些默认值。如何编写脚本来编辑登录名、密码和数据库?

【问题讨论】:

  • 您想同时更改 $default 和 $test 块还是只更改 $test?
  • 是的,我想同时更改 $default 和 $test。

标签: php perl bash cakephp


【解决方案1】:

php 文件包含您的示例文本:

kent$  awk '/login/{l++;if(l>1)gsub(/root/,"newLogin");} 
        /password/{p++;if(p>1)gsub(/xxx/,"newPwd");} 
        /database/{d++;if(d>1)gsub(/xxx/,"newDB");} 1' php
<?php
class DATABASE_CONFIG {

    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'root',
        'password' => 'xxx',
        'database' => 'xxx',
        'prefix' => '',
        //'encoding' => 'utf8',
    );

    public $test = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'newLogin',
        'password' => 'newPwd',
        'database' => 'cake_test_db',
        'prefix' => '',
        //'encoding' => 'utf8',
    );
}

这只会更改 $default 块之后的块。并且,只有默认值会被改变。例如在您的 $test 中,'database' =&gt; 'cake_test_db' 的值不是默认的 'xxx',因此不会更改。

如果您愿意,可以将新值放入变量中,并使用 -v 传递给 awk。

编辑

如果您想更改所有值(包括 $default 块),会更容易,请检查以下几行:(与上面相同,仅更改默认值(root,xxx,xxx)。

kent$    awk '/login/{gsub(/root/,"newLogin");}                                                                                          
            /password/{gsub(/xxx/,"newPwd");}                                                                                            
            /database/{gsub(/xxx/,"newDB");} 1' php                                                                                      
<?php
class DATABASE_CONFIG {

    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'newLogin',
        'password' => 'newPwd',
        'database' => 'newDB',
        'prefix' => '',
        //'encoding' => 'utf8',
    );

    public $test = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'newLogin',
        'password' => 'newPwd',
        'database' => 'cake_test_db',
        'prefix' => '',
        //'encoding' => 'utf8',
    );
}

edit2

这适用于您的新示例。

 sed '/login/{s/username/newLOGIN/}; /password/{s/password/newPWD/2}; /database/{s/database_name/newDB/}' php

    <?php
    class DATABASE_CONFIG {
        public $default = array(
            'datasource' => 'Database/Mysql',
            'persistent' => false,
            'host' => 'hostname',
            'login' => 'newLOGIN',
            'password' => 'newPWD',
            'database' => 'newDB',
            'prefix' => '',
            //'encoding' => 'utf8',
        );
        public $test = array(
            'datasource' => 'Database/Mysql',
            'persistent' => false,
            'host' => 'hostname',
            'login' => 'newLOGIN',
            'password' => 'newPWD',
            'database' => 'newDB',
            'prefix' => '',
            //'encoding' => 'utf8',
        );
    }

【讨论】:

【解决方案2】:
    #!/usr/bin/awk -f

    BEGIN {   FS="'"   

         usr[0] ="usr1"   ;  usr[1] = "user2" 
        pass[0] ="pass1"  ; pass[1] = "pass2" 
          db[0] ="db1"    ;   db[1] = "db2"
    }  
    {
    if ($2 == "login") { 
        $0="\t'login' => '" usr[u] "',"
        u++
    } 
    if ($2 == "password") { 
        $0="\t'password' => '" pass[p] "',"
        p++
    }
    if ($2 == "database") { 
        $0="\t'database' => '" db[d] "',"
        d++
    }
     print
    } 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-23
    • 2016-07-12
    • 2022-12-15
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2016-01-21
    相关资源
    最近更新 更多