2013-01-10 165 views
4

我正在尝试执行以下搜索并进行替换,但由于某种原因它无法正常工作。我试图取代:搜索并替换Linux

require_once('

require_once($_SERVER['DOCUMENT_ROOT']/'

这些都是确切 srings(斜线和单引号包括在内)。

这是我尝试,但我无法得到它的工作:

find ./ -type f -readable -writable -exec sed -i "s/require_once(\'/require_once($_SERVER['DOCUMENT_ROOT'] . \'\//g" {} \; 

我在做什么错?

+0

您是否收到错误讯息?我认为问题在于转义特殊字符。 – alexraasch

回答

5

你需要躲避$/字符:

sed "s/require_once('/require_once(\$_SERVER['DOCUMENT_ROOT']\/'/g" 
+0

可以使用'@'作为sed的分隔符,所以你不需要转义'/'。例如:sed -e's @/asd/@ b @'。但是你仍然需要转义'$'。 – dwalter

+0

真棒工作完美,谢谢! – Zak

0

您需要反斜杠转义双引号内的美元符号,否则外壳内插(不存在)的环境变量_SERVER,替换它与空字符串。