Sed和PHP关联数组

Sed和PHP关联数组,php,sed,gettext,Php,Sed,Gettext,我有PHP代码: <?php $vF = array('nazwa' => 'Nazwa', 'telefon' => 'Telefon', 'email' => 'E-mail', 'adres' => 'Adres'); ?> 我想用sed把它改成这样: <?php $vF = array('nazwa' => _('Nazwa'), 'telefon' => _('Telefon'), 'email' => _('E-mai

我有PHP代码:

<?php
$vF = array('nazwa' => 'Nazwa', 'telefon' => 'Telefon', 'email' => 'E-mail', 'adres' => 'Adres');
?>

我想用sed把它改成这样:

<?php
$vF = array('nazwa' => _('Nazwa'), 'telefon' => _('Telefon'), 'email' => _('E-mail'), 'adres' => _('Adres'));
?>


我该怎么做呢?

如果这是整个文件,并且是那种特定的格式,那么您可以将
sed
与以下内容结合使用:

sed "s/\\('[^']*'\\)\\([,)]\\)/_(\\1)\\2/g" b.php
否则,请看一看全精度解析器。您可以读取PHP文件,然后使用
token\u get\u all()
找出数组中字符串的确切位置,然后可以用所需字符串替换它们并呈现修改后的源代码。

使用
perl

perl -pe 's/(?<=> )([^,]+)(?=[,;])/_($1)/g' foo.php
perl-pe的/(?)([^,]+)(?=[,;])/(1)/g'foo.php
测试:
$cat foo.php
$perl-pe's/(?)([^,]+)(?=[,;])/(1)/g'foo.php

可能需要将逗号设置为可选,因为最后一个数组值没有逗号。但是,这个更改会破坏正则表达式,所以您可能还需要在数组值之前考虑匹配<代码> = > s*<代码>。记住,这将不能处理像“NA’ZWA”这样的字符串,这些字符串在PHP中是完全有效的。还有双引号分隔的字符串。这将替换文件中的所有内容。您需要它更智能,只替换数组值。(即在
=>
)@Ariel之后,使用正则表达式和sed使其防弹将非常复杂。如果这是整个文件,并且采用该特定格式,它将正常工作。如果没有,那么PHP标记器将做得更好。
$ cat foo.php
<?php
$vF = array('nazwa' => 'Nazwa', 'telefon' => 'Telefon', 'email' => 'E-mail', 'adres' => 'Adres');
?>

$ perl -pe 's/(?<=> )([^,]+)(?=[,;])/_($1)/g' foo.php
<?php
$vF = array('nazwa' => _('Nazwa'), 'telefon' => _('Telefon'), 'email' => _('E-mail'), 'adres' => _('Adres'));
?>