我有一个php文件:
<?php
return array(
'modules' => array(
'Application',
'DoctrineModule',
'DoctrineORMModule'
),
);
由于我很懒,我正在编写一个脚本,通过一个简单的调用将一个元素添加到'modules'数组:
$ sh myscript.sh 'NewModule'
应在最后一个'modules'元素之后添加NewModule。
我尝试使用'sed'命令执行此操作,但我还没有成功。欢迎任何帮助。
答案 0 :(得分:1)
这是使用GNU sed
的一种方式:
sed '/modules..=>.array/,/),/ { /[^(,]$/ s//&,\n '\''NewModule'\''/ }' file.php
结果:
<?php
return array(
'modules' => array(
'Application',
'DoctrineModule',
'DoctrineORMModule',
'NewModule'
),
);
如果您愿意,可以使正则表达式更严格。但我会把这份工作留给你。
答案 1 :(得分:1)
正如我在评论中所建议的那样,我认为更简单的方法是使用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
是什么。也许您问题中的代码是函数的摘录。无论如何,这应该足以让我们了解这个想法。