0

私はphpファイルを持っています:

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

私は怠け者なので、単純な呼び出しで「modules」配列に要素を追加するスクリプトを作成しています。

$ sh myscript.sh 'NewModule'

NewModule は、最後の「modules」要素の後に追加する必要があります。

「sed」コマンドでこれを試みましたが、まだ成功しませんでした。どんな助けでも大歓迎です。

4

2 に答える 2

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 に答える
1

を使用する 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 に答える