2017-01-10 147 views
0

在許多PHP文件,我已經定義的變量$_PATHROOT這樣使用sed的替換變量名和

$_PATHROOT = '../../../../'; 

它的價值,我會用define()替換:

define('_PATHROOT', '../../../../'); 

當然,值../../../../因文件不同而不同。

是否有可能與Linux sed的命令行?

謝謝。

回答

1

這是絕對有可能。

下面的命令應該對任何腳本工作(它爲我工作在一個測試文件):

sed -ri "s/^[$]_PATHROOT = '(([.][.]\/)+)';$/define('_PATHROOT', '\1');/" FILEPATH

,你用文件的路徑替換filepath進行編輯。

此命令假定您要更改線路是完全

$_PATHROOT = '../../';

,除了有可能是「../"s的任何正數。任何空白的變化都會導致它失敗,所以如果這個變化跨文件,你需要修改它。

感謝肯特使用[$]而不是反斜槓亂七八糟的$的想法有兩個bash和sed的特殊含義。

+0

真不錯,謝謝:)我有短短用手做:) –

0

這對於sed中給出的示例的一行作品:

sed -r "s/^[$](\w+)(.*);/define('\1'\2);/;s/=/,/" 

kent$ sed -r "s/^[$](\w+)(.*);/define('\1'\2);/;s/=/,/"<<<"\$_PATHROOT = '../../../../';" 
define('_PATHROOT' , '../../../../'); 
+0

是的,但值可能會改變,它可以是例如'../../',我想在find命令中執行sed命令find -type f -name「* .php」-exec sed -i ...'。可能嗎? –

+0

我想PHP文件也會包含其他行。假設PHP中有多少行以'$'開頭,這種模式不會影響其他不相關的行嗎? –

+0

這取決於文件,它們不具有相同數量以'$'線。 –