从另一个文件替换php中的字符串

时间:2010-05-03 11:15:28

标签: php sed awk gettext

我有一些旧的PHP文件,我想转换为使用gettext。 这些文件的内容如下:

$LD = 'Some String';
$Another = 'some other ~n~ string';

我必须将所有$ LD,$ Another替换为声明它们的文件:

_('Some string');

黑客攻击有点创建某种regexp来查找声明, 我的目的是使用sed和awk进行替换。但是我对如何进行替换没有任何线索......

任何帮助......

1 个答案:

答案 0 :(得分:1)

试试这个:

sed -r $'s/(\$LD = )(\'.*\')(.*)/\\1_(\\2)\\3/' filename

示例:

$ echo "\$LD = 'Some String';" | sed -r $'s/(\$LD = )(\'.*\')(.*)/\\1_(\\2)\\3/'
$LD = _('Some String');

修改

这将查找并更改两个变量,-i将进行就地更改:

sed -i -r $'s/(\$(LD|Another) = )(\'.*\')(.*)/\\1_(\\3)\\4/'

您可以列出由管道符号分隔的更多变量名称。

您的grep命令需要单引号而不是反引号,而-E需要使用扩展的正则表达式。它还需要一个filespec glob。正如你所说的正则表达式基本上说“这个文件是否有任何变量定义?”它说要寻找任何变量:

  • 从行的开头开始,前面没有空格
  • 有零个或多个数组下标,由零个或多个数字组成(包括空下标,因此附加数组)
  • 忽略任何关联数组赋值($array["key"]=value
  • 该行必须以分号结尾
  • 我不确定?打算做什么

如果变量赋值,则失败:

  • 发生在一些空白之后
  • 使用字母键或变量作为键
  • 出现在包含其他陈述的行上
  • 有任何尾随空格
  • 可能是其他人

您可能需要使正则表达式更健壮或更简单,或者只是假设任何PHP文件都有变量赋值,让sed查找并更改感兴趣的变量。

为了让grep要处理文件,您需要指定要查看的文件:

grep -E -i -R 'your regex' * | sed ...

或者,如果你让sed这样做:

find . -name "*.php" | sed ...

此外,还有一个名为ack is better than grep的工具,用于在代码文件中查找内容。

在任何情况下,特别是如果您使用就地选项,我强烈建议您进行测试运行(和备份)。