Sed
如何通過管道傳輸 sed 命令?
我有一個 bash 腳本可以非常可靠地為我導入 wordpress dbs,但是我的一個站點來自以前的 wordpress 多站點,因此數據庫在數據庫中包含 DEFINERS,這會阻止以下程式碼正確執行
gunzip -c $destination_path_to_wordpress/folder/db-export.sql.gz | mysql -u $destination_db_user -p$destination_db_pass $destination_db_name
上述結果
ERROR 1227 (42000) at line 3224: Access denied; you need (at least one of) the SUPER or SET_USER_ID privilege(s) for this operation
如果我手動導出數據庫然後執行
sed 's/\sDEFINER=
[^]*
@[^
]*//g' -i db-export.sql
然後嘗試導入數據庫,那麼我可以成功導入數據庫,搜尋替換使用者名,並將它的站點。問題:
將我目前的 db import 命令和擺脫定義器問題的 sed 命令結合起來的正確語法是什麼?以下是我想要實現的目標:
顯然不正確,但你明白了要點……
gunzip -c $destination_path_to_wordpress/folder/db-export.sql.gz | `sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i db-export.sql | mysql -u $destination_db_user -p$destination_db_pass $destination_db_name
有小費嗎?
謝謝
在這種情況下,您希望
sed
處理來自gunzip
而不是來自文件的數據。省略文件名,它會愉快地從標準輸入(即從gunip
)讀取並寫入標準輸出(即mysql
)。為了便於閱讀,我將其分為三行。它仍然會像這樣工作,但如果你真的願意,你可以將這些行合併為一個:
gunzip -c "$destination_path_to_wordpress/folder/db-export.sql.gz" | sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' | mysql -u "$destination_db_user" -p"$destination_db_pass" "$destination_db_name"