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"/' {} ';'