Shell和sed:将数组元素添加到PHP文件中

时间:2012-10-30 15:24:59

标签: php bash shell

我有一个php文件:

<?php
return array(
    'modules' => array(
        'Application',
        'DoctrineModule',
        'DoctrineORMModule'
    ),
);

由于我很懒,我正在编写一个脚本,通过一个简单的调用将一个元素添加到'modules'数组:

$ sh myscript.sh 'NewModule'

应在最后一个'modules'元素之后添加NewModule。

我尝试使用'sed'命令执行此操作,但我还没有成功。欢迎任何帮助。

2 个答案:

答案 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是什么。也许您问题中的代码是函数的摘录。无论如何,这应该足以让我们了解这个想法。