我有一些严重弃用的PHP代码,我正在筛选。我遇到的一个问题是像这样的数百个错误:
[Mon Dec 09 07:00:33 2013] [error] [client 127.0.0.1] PHP Notice: Use of undefined constant id - assumed 'id' in /home/srv/site.local/content/online.php on line 171, referer: http://site.local/index.php
这导致前一个调用数组的编码器的实践如下:
$array[some_element]
而不是:
$array['some_element']
所以我知道如何解决这个问题,方法是浏览每个文件并添加引号,重复一遍,一遍又一遍。我的问题是如何为此编写脚本。我想这可能是一个sed或awk脚本,但我不确定。一旦我发布了这个,我就会开始研究sed,但有任何建议吗?
答案 0 :(得分:1)
我对php一无所知,所以我不确定这个解决方案是否特别好:
sed "s|\[[ ]*|\[\'|g;s|[ ]*\]|\'\]|g" test.in
使用示例:
[fixarraysubscript $] cat test.in
$array[some_element]
$name1[index]
$name2[index]
$name3[ id ]
$name4[ id2 ]
[fixarraysubscript $]
[fixarraysubscript $] sed "s|\[[ ]*|\[\'|g;s|[ ]*\]|\'\]|g" test.in
$array['some_element']
$name1['index']
$name2['index']
$name3['id']
$name4['id2']
[fixarraysubscript $]
显然我的输入文件有点人为。如果这对您不起作用,请随时发布一些真实的输入。
答案 1 :(得分:0)
这可能适用于gnu awk
echo '$array[some_element]' | awk '{print gensub(/\$([^[]+)\[([^]]+)]/,"$\\1["q"\\2"q"]","g")}' q="'"
$array['some_element']
为您的文件
awk '{print gensub(/\$([^[]+)\[([^]]+)]/,"$\\1["q"\\2"q"]","g")}' q="'" file
或
awk '{print gensub(/\$([^[]+)\[([^]]+)]/,"$\\1[\x27\\2\x27]","g")}' file
编辑:更改正则表达式以反映变量数组名称。