使用sed替换变量名及其值

时间:2017-01-10 14:18:03

标签: replace sed

在许多PHP文件中,我已经像这样定义了变量$_PATHROOT

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

我想用define()替换它:

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

当然,值../../../../因文件而异。

是否可以使用linux sed命令行?

感谢。

2 个答案:

答案 0 :(得分:1)

这绝对是可能的。

以下命令适用于任何脚本(它在测试文件中适用于我):

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

将FILEPATH替换为要编辑的文件的路径。

此命令假定您要更改的行正好是

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

除了可能有任何正数的“../”。白色空间的任何变化都会将其抛弃,因此如果文件因文件而异,则需要对其进行修改。

相信Kent使用[$]而不是一堆反斜杠的想法$在bash和sed中都有特殊意义。

答案 1 :(得分:0)

这个sed one-liner适用于给定的例子:

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

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