0

我有一个 php 文件:

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

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

$ sh myscript.sh 'NewModule'

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

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

4

2 回答 2

1

这是一种使用方法GNU sed

sed '/modules..=>.array/,/),/ { /[^(,]$/ s//&,\n        '\''NewModule'\''/ }' file.php

结果:

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

如果您愿意,可以使正则表达式更加严格。但我会把这份工作留给你。

于 2012-10-30T15:40:33.670 回答
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是关于什么的。也许您问题中的代码是函数的摘录。无论如何,这应该足以让这个想法得到理解。

于 2012-10-30T17:25:06.337 回答