Linux

SED 查找和替換 w 正則表達式

  • August 5, 2009

好吧,所以我很困惑,沒有想法。

我正在嘗試用新 IP 地址替換所有舊 IP 地址。

find -type f | grep \.php$ | xargs sed -r -i "s/(\'|\")(localhost|127.0.0.1|10.0.32.4|10.0.32.5)(\'|\")/\"10.0.32.165\"/g"

我正在嘗試查找所有 PHP 文件,並將以下任何內容(localhost、127.0.0.1、10.0.32.4、10.0.32.5)替換為 10.0.32.165。

find * | grep \.php$ | xargs egrep "(\'|\")(localhost|127.0.0.1|10.0.32.4|10.0.32.5)(\'|\")"

執行第一個命令後,我想確保沒有留下舊值的痕跡,所以我執行了上面的命令,但不幸的是它返回了

siteeval/application/libraries/fetcher.url.class.php:    $this->host = "10.0.32.4";

有人看到我做錯了嗎?或者也許可以讓我找到更好的方法?

嘗試這個:

sed -e 's/\(127\.0\.0\.1\|10\.0\.32\.4\|localhost\|10\.0\.32\.5\)/10.0.32.165/g'

您需要轉義括號和管道。如果您想確保它們始終在引號之間,請嘗試:

sed -e 's/\"\(127\.0\.0\.1\|10\.0\.32\.4\|localhost\|10\.0\.32\.5\)\"/10.0.32.165/g'

稍微測試一下:

$ echo '"10.0.32.4"' | sed -e 's/\"\(127\.0\.0\.1\|10\.0\.32\.4\|localhost\|10\.0\.32\.5\)\"/10.0.32.165/g'
10.0.32.165
$ echo '"localhost"' | sed -e 's/\"\(127\.0\.0\.1\|10\.0\.32\.4\|localhost\|10\.0\.32\.5\)\"/10.0.32.165/g'
10.0.32.165

對未來的建議。總是先嘗試小樣本(使用像這樣的迴聲),然後再轉向複雜的情況。

*編輯:也逃脫了點。

引用自:https://serverfault.com/questions/49913