2012-10-30 45 views
0

我有一個PHP文件:殼牌和sed:添加一個數組元素的PHP文件

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

因爲我懶,我正在寫一個腳本,將元素添加到「模塊」陣列用一個簡單的電話:

$ sh myscript.sh 'NewModule' 

NewModule應該在最後'模塊'元素後面添加。

我試着用'sed'命令來做這件事,但我還沒有成功。歡迎任何幫助。

+1

看起來你正在花費額外的精力來實現更有可能中斷的事情。如果你懶惰,如果你的shell腳本只需要在文本文件中寫一行額外的行,那麼使用['file()'](http:// php .NET /文件)? – ghoti

回答

1

下面是使用GNU sed一個辦法:

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

結果:

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

可以使正則表達式,如果你想更加嚴格。但我會把這個工作交給你。

1

正如我在評論中所建議的那樣,我認爲更簡單的方法是使用file()來讀取新數據,該數據已將事物轉換爲數組。

<?php 

$thing=array(
    'modules' => array(
     'Application', 
     'DoctrineModule', 
     'DoctrineORMModule' 
    ) 
); 

foreach(file("modules.txt") as $new) { 
    $thing['modules'][]=trim($new); 
} 

print_r($thing); 

而且結果:

[[email protected] ~]$ cat modules.txt 
foo 
bar 
[[email protected] ~]$ echo "snerkle" >> modules.txt 
[[email protected] ~]$ php -f myphpfile.php 
Array 
(
    [modules] => Array 
     (
      [0] => Application 
      [1] => DoctrineModule 
      [2] => DoctrineORMModule 
      [3] => foo 
      [4] => bar 
      [5] => snerkle 
     ) 

) 
[[email protected] ~]$ 

使用foreach(){}的唯一原因就是爲了讓你trim()每個元素。如果你不介意在年底['modules']有換行符的元素,你可以簡單地更換循環:

$thing['modules']=array_merge($thing['modules'], file("modules.txt")); 

我不知道你的return約。也許你的問題中的代碼是一個函數的摘錄。無論如何,這應該足以讓這個想法貫穿始終。