我正在筛选一些严重弃用的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,但有什么建议吗?
我对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 $]
显然,我的输入文件有些做作。如果这对你不起作用,请随意发表一些真实的意见。
这可能适用于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
EDIT:已更改regex以反映变量数组名称。