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

、およびパターンは特別なので、$エスケープする必要があります(これはコードの主な問題です)。上記の式は、変更せずに保持したい文字列部分をキャプチャして同じ文字列に置き換えてから、1つを挿入します。[]."

追加するgと、s/.../.../各行のパターンの発生をすべて変更します。

.php現在のディレクトリ内または以下のすべてのファイルに対してこのコマンドを実行するには、次の手順を実行します。

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

関連情報