
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
、およびパターンは特別なので、$
エスケープする必要があります(これはコードの主な問題です)。上記の式は、変更せずに保持したい文字列部分をキャプチャして同じ文字列に置き換えてから、1つを挿入します。[
]
.
"
追加するg
と、s/.../.../
各行のパターンの発生をすべて変更します。
.php
現在のディレクトリ内または以下のすべてのファイルに対してこのコマンドを実行するには、次の手順を実行します。
find . -type f -name '*.php' \
-exec sed -i.bak 's/"\(\$_SERVER\["DOCUMENT_ROOT"\]\.\)/\1"/' {} ';'