我尝试使用find -type f -name "*.php" -exec sed -i.bak 's|"$_SERVER[\"DOCUMENT_ROOT\"]./|$_SERVER[\"DOCUMENT_ROOT\"]."/|gI' {} \;
替换
<?php
include("$_SERVER["DOCUMENT_ROOT"]./info/benth_nav_top.php");
include_once("$_SERVER["DOCUMENT_ROOT"]./analyticstracking.php");
?>
到
<?php
include($_SERVER["DOCUMENT_ROOT"]."/info/benth_nav_top.php");
include_once($_SERVER["DOCUMENT_ROOT"]."/analyticstracking.php");
?>
不幸的是,它并没有取代任何东西。
我错过了什么?
先感谢您
答案1
您想将双引号从之前移动$_SERVER["DOCUMENT_ROOT"].
到之后。
sed
在单个文件中执行此操作的命令:
sed 's/"\(\$_SERVER\["DOCUMENT_ROOT"\]\.\)/\1"/' file.php
、和在模式中很特殊$
,必须转义(这是代码中的主要问题)。上面的表达式捕获了我们想要保持不变的字符串部分,并将其替换为相同的字符串,但随后插入了一个。[
]
.
"
添加g
后s/.../.../
对每行上所有出现的模式进行更改。
.php
要对当前目录中或当前目录下的所有文件运行此命令:
find . -type f -name '*.php' \
-exec sed -i.bak 's/"\(\$_SERVER\["DOCUMENT_ROOT"\]\.\)/\1"/' {} ';'