Sed
當文件名包含空格時,搜尋並替換目錄中所有 .php 文件中的登錄字元串
我更改了 mySQL 的密碼和使用者名,我需要相應地替換所有 PHP 腳本中的連接字元串。
我在使用該命令時遇到問題,因為我的許多 php 文件名都包含空格。
我可以更改什麼以使此命令正常工作而不會出現“沒有此類文件或目錄”錯誤?
這是我正在使用的命令:
pattern='mysql_connect("localhost", "olduser", "oldpwd")' replacement='mysql_connect("localhost", "newuser", "newpwd")' find . -name "*.php" | xargs -n 1 sed -i -e 's|$pattern|$replacement|g'
我不熟悉 xargs 和 sed,我從這個答案複製了這段程式碼到一個類似的問題。
(我想我會把 mysql_connect 語句放到一個 php 包含文件中,下次只在一個地方更改它。)
我正在使用 BASH 執行 Ubuntu 14.04 LTS
您必須使用
NULL byte
和雙引號:find . -name '*.php' -print0 | xargs -0 -n 1 sed -i -e "s|$pattern|$replacement|g"
或使用簡單的 for 循環:
for p in *php; do sed -i -e "s|$pattern|$replacement|g" "$p" done
了解如何在 shell 中正確引用,這非常重要:
“雙引號”每個包含空格/元字元和每個擴展的文字:
"$var"
,"$(command "$var")"
,"${array[@]}"
,"a & b"
. 用於'single quotes'
程式碼或文字$'s: 'Costs $5 US'
,ssh host 'echo "$HOSTNAME"'
. 見http://mywiki.wooledge.org/Quotes