find 및 sed가 파일 내용을 대체하지 않았습니다.

find 및 sed가 파일 내용을 대체하지 않았습니다.

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

, 및 패턴이 특별하므로 $이스케이프해야 합니다(이것이 코드의 주요 문제입니다). 위의 표현식은 변경하지 않고 유지하려는 문자열 부분을 캡처하여 동일한 문자열로 바꾼 다음 하나를 삽입합니다.[]."

추가할 gs/.../.../각 행의 패턴 발생을 모두 변경합니다 .

.php현재 디렉터리 안이나 아래의 모든 파일에 대해 이 명령을 실행하려면 다음을 수행하세요.

find . -type f -name '*.php' \
    -exec sed -i.bak 's/"\(\$_SERVER\["DOCUMENT_ROOT"\]\.\)/\1"/' {} ';'

관련 정보