我想在檔案中復制 Wprdpress 資料庫名稱和用戶名,因為我有打擊代碼。
newdbname=${UN:0:8}"_wpdb"
newdbuser=${UN:0:8}"_wpuser"
DB_NAME=`cat wp-config.php | grep DB_NAME | cut -d \' -f 4`
DB_USER=`cat wp-config.php | grep DB_USER | cut -d \' -f 4`
sed -i "s/$DB_NAME/$newdbname/g" "$file"
sed -i "s/$DB_USER/$newdbuser/g" "$file"
但是這里發生的是,如果資料庫名稱和用戶名相同,在這種情況下 sed 使用用戶名作為資料庫名稱,我得到這樣的輸出
define( 'DB_NAME', 'domain_wpuserdb' );
define( 'DB_USER', 'domain_wpuserdb' );
預期結果
define( 'DB_NAME', 'domain_wpdb' );
define( 'DB_USER', 'domain_wpuser' );
我也嘗試過 sed 和 perl
perl -i -pe "s/$DB_NAME/$newdbname/g" "$file"
perl -i -pe "s/$DB_USER/$newdbuser/g" "$file"
但我得到相同的結果。我應該做哪些改變來糾正這個問題?
uj5u.com熱心網友回復:
您可以在命令前使用地址前綴sed
來匹配要操作的特定行。因此,您只需替換該行中的資料庫名稱DB_NAME
,并替換該DB_USER
行中的用戶名。
也不需要兩個命令,您可以使用多個選項sed
在單個命令中執行多個操作。-e
sed -i -e "/DB_NAME/s/'$DB_NAME'/'$newdbname'/" -e "/DB_USER/s/'$DB_USER'/'$newdbuser'/" "$file"
uj5u.com熱心網友回復:
以下演示代碼演示了實作所需結果的多種方法之一
use strict;
use warnings;
use feature 'say';
my $db_name = 'domain_wpdb';
my $db_user = 'domain_wpuser';
while( <DATA> ) {
if( /^define\( 'DB_NAME'\, / ) {
say "define( 'DB_NAME', '$db_name' );"
} elsif( /^define\( 'DB_USER', / ) {
say "define( 'DB_USER', '$db_user' );"
} else {
print;
}
}
exit 0;
__DATA__
Some text to be re-printed
define( 'DB_NAME', 'domain_wpuserdb' );
define( 'DB_USER', 'domain_wpuserdb' );
Some text to be re-printed
輸出
Some text to be re-printed
define( 'DB_NAME', 'domain_wpdb' );
define( 'DB_USER', 'domain_wpuser' );
Some text to be re-printed
將代碼更改為while( <> ) {
并運行為script.pl wp-config.php > temp-config.php
,然后檢查實作的所需結果temp-config.php
并在成功時替換wp-config.php
檔案。
uj5u.com熱心網友回復:
要匹配要操作的特定行,請在 sed 命令之前添加地址作為前綴,也不需要使用兩個,Sed commands
而是可以像這樣使用
sed -i "/DB_NAME/s/\"$DB_NAME\"/\"$newdbname\"/;/DB_USER/s/\"$DB_USER\"/\"$newdbuser\"/" "$file"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/467175.html