Sedコマンドをパイプする方法は?

Sedコマンドをパイプする方法は?

非常に信頼性の高いWordPressデータベースを取得するbashスクリプトがありますが、私のサイトの1つが以前の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

どのようなヒントがありますか?

ありがとう


ベストアンサー1

sedこの場合、ファイルから来るデータの代わりにファイルから来るデータを処理しようとします。gunzipファイル名を省略すると、幸せに読み込むことができます。標準入力(つまり、からgunip)そして次のアドレスに書き込みます。標準出力(今すぐmysql)。

読みやすいように3行に分けました。それでも次のように動作しますが、本当に必要な場合は、次の行を一緒にリンクできます。

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"

おすすめ記事