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



我有一个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是什么。也许您的问题中的代码是函数的摘录。无论如何,这应该足以使这个想法跨越。

相关内容

  • 没有找到相关文章

最新更新