2016-07-08 6 views
0

PostgreSQLを除く外部アプリケーションのないMac OSX(iTerm2)の端末を使用しているので、かなり大きい(52 MB)pg_dumpデータファイルをPostgreSQLデータベースにインポートする際に、正規表現の検索/置換を実行したい。ダンプファイルがPostgreSQLにヒットする前にこれを行う必要があります。なぜなら、テーブルを作成および変更する受信SQLクエリを変換する必要があるからです。インポート中にpg_dumpデータに対してフィルタを実行するにはどうすればよいですか?

私はデータをインポートするために使用しているシェルコマンドは次のとおりです。

psql MyDatabase < mydata.sql 

は、正規表現を介してデータがフィルタを交換/見つけるパイプに方法はありますか? grepのようなネイティブのLinuxコマンドラインユーティリティで何かできますか?

また、正規表現をバッチしてダンプファイルに適用し、その変更を新しいファイルに保存するにはどうすればよいですか?

+0

現時点での質問はまったく役に立たない。 '正規表現を見つける/置き換える 'と言ってください。ここに時間を費やしていると、あなたは[\ [mcve \]](http://stackoverflow.com/help/mcve)の作り方を知らないでしょうか? – sjsam

+0

@sjsam私はあなたが何を意味するか分かりません。 – Redtopia

+0

置き換えたいパターンと '新しいパターン 'に関する情報を追加して質問を編集してください。また、 'sed'' awk'のように自由に使えるツールを追加することを検討してください。 – sjsam

答えて

2

正規表現を認識するsedを使用できます。

たとえば、「anotherschema」で単語の境界に囲まれている「MYSCHEMA」の出現をすべて置き換えるには、次のように使用できます。

sed -e 's/\bmy\(schema\)\b/another\1/g' mydata.sql | psql MyDatabase 
また
+0

私はそれを試してみましょう。実行する正規表現が複数ある場合はどうすればよいですか?一度にすべてを実行する方法はありますか? – Redtopia

+1

複数の '-e'オプションを指定するだけです。 –

+0

sedのアドバイスをありがとう。どうやらあなたのLinuxコマンドが上手くいかないのであれば、あなたは疑問には耐えられません。私の質問がばかではないように感じたら、多分あなたはそれをアップヴォートすることができます。ありがとう! – Redtopia

1

、どのようにだろうIバッチ私の正規表現の、それらを適用します私のダンプ ファイルに変更し、新しいファイルに変更を保存しますか?

sed -e 's/\bmy\(schema\)\b/another\1/g' mydata.sql >mysqlnew.sql 

これはmysqlnew.sqlという名前の新しいファイルに出力をリダイレクトします。

sedは、インプレース編集オプションをサポートしています。インプレース編集-iオプションを使用して、上記のコマンドは、このコマンドはmydata.sql.bakに、元mydata.sqlのコピーを作成し、 は恒久的にmydata.sqlに書き込まれた変更を行い

sed i.bak -e 's/\bmy\(schema\)\b/another\1/g' mydata.sql 

に置き換えることができます。

関連する問題