我有一个php文件:
<?php
return array(
'modules' => array(
'Application',
'DoctrineModule',
'DoctrineORMModule'
),
);
既然我很懒
$ sh myscript.sh 'NewModule'
应在最后一个"模块"元素之后添加newModule。
我尝试使用'sed'命令执行此操作,但我还没有成功。欢迎任何帮助。
这是使用GNU sed
:
sed '/modules..=>.array/,/),/ { /[^(,]$/ s//&,n '''NewModule'''/ }' file.php
结果:
<?php
return array(
'modules' => array(
'Application',
'DoctrineModule',
'DoctrineORMModule',
'NewModule'
),
);
如果愿意,您可以使正则更严格。但是我会把这份工作留给你。
正如我在评论中所建议的那样,我认为一种更简单的方法是使用file()
读取新数据,该数据已经将事物变成数组。
<?php
$thing=array(
'modules' => array(
'Application',
'DoctrineModule',
'DoctrineORMModule'
)
);
foreach(file("modules.txt") as $new) {
$thing['modules'][]=trim($new);
}
print_r($thing);
和结果:
[ghoti@pc ~]$ cat modules.txt
foo
bar
[ghoti@pc ~]$ echo "snerkle" >> modules.txt
[ghoti@pc ~]$ php -f myphpfile.php
Array
(
[modules] => Array
(
[0] => Application
[1] => DoctrineModule
[2] => DoctrineORMModule
[3] => foo
[4] => bar
[5] => snerkle
)
)
[ghoti@pc ~]$
使用foreach(){}
的唯一原因是让您每个元素trim()
。如果您不介意['modules']
最终具有新线的元素,则可以简单地用:
$thing['modules']=array_merge($thing['modules'], file("modules.txt"));
我不确定您的return
是什么。也许您的问题中的代码是函数的摘录。无论如何,这应该足以使这个想法跨越。