我有一些旧的PHP文件,我想转换为使用gettext。 这些文件的内容如下:
$LD = 'Some String';
$Another = 'some other ~n~ string';
我必须将所有$ LD,$ Another替换为声明它们的文件:
_('Some string');
黑客攻击有点创建某种regexp来查找声明, 我的目的是使用sed和awk进行替换。但是我对如何进行替换没有任何线索......
任何帮助......
答案 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
的工具,用于在代码文件中查找内容。
在任何情况下,特别是如果您使用就地选项,我强烈建议您进行测试运行(和备份)。