给定一个文件:
<?
$dbo = mysql_fetch_assoc();
$dbo->employee_id;
$dbo->employee_name;
$dbo->dirt;
$dbo->dirt23;
$dbo->dirt_2_3;
?>
并使用 sed 查找和替换:
sed -e "s|$dbo->([\w\_]*)|$dbo['\1']|g" test.php
它总是返回一个错误。我试过使用撇号作为容器并正确转义所有内容并使用正斜杠作为命令分隔符,但无济于事。
结果应该是:
<?
$dbo = mysql_fetch_assoc();
$dbo['employee_id'];
$dbo['employee_name'];
$dbo['dirt'];
$dbo['dirt23'];
$dbo['dirt_2_3'];
?>
请帮忙。
最佳答案
一些错误:
\w
已经包含下划线$
需要转义- 方括号需要去掉
- 你在双引号内使用
$
而被 shell 扩展
使用以下 sed:
sed -r 's/(\$dbo->)([[:alnum:]_]+)(.*)$/\1["\2"]\3/g'
或在 OSX 上:
sed -E 's/(\$dbo->)([[:alnum:]_]+)(.*)$/\1["\2"]\3/g'
对于使用单引号:
sed -r "\$s/(dbo->)([a-zA-Z0-9_]+)(.*)$/\1['\2']\3/g"
关于php - 带替换的 sed 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17774453/