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' => 'cake_test_db'
значение не является значением по умолчанию 'xxx', поэтому оно не будет изменено.
, если вы хотите, вы можете поместить новое значение в переменную и передать в awk с -v.
edit
, если вы хотите изменить все значения (включая блок $ 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',
);
}