2016-11-17 16 views
1

サイズが220 MBを超える大きな.sqlファイルがあります。その中に今Grep/Sedは大きな.sqlファイルの小さなテキストを置き換えます

私は私がしてデータベースをインポートしようとしていますので、データベースをインポートしようとすると、エラーの下に与え、MySQLのデータベースユーザー以外のユーザーを使用して、そのファイルにTRIGGER文を持っている:

ERROR 1142 (42000) at line 9732: TRIGGER command denied to user 'user_name'@'localhost' for table 'sales_flat_creditmemo' 

これで、TRIGGER文を含むすべての行を見つけて、ファイルを開いていなくても、 "user_name"をmysqlユーザ "username_actual"に変更できます。 Geanyでこのファイルを開くと、Geanyもクラッシュします。

+0

のためだけではsedを使用して最後の解決策は、あなたは私たちに、この自分自身を解決するために、あなたの試みを示すことができる、またはあなただけのフリーハンドアウトを探していますか? – ghoti

答えて

1

grepsedの組み合わせを、実際にファイルを開くことなく、インプレース置換に使用できます。フラグの

grep -Iril 'TRIGGER' sql_file | xargs sed -i 's/user_name/username_actual/g' 

目的は以下のとおりです。 -

-I - ファイルにgrepをしながら>バイナリファイルを無視します。ディレクトリ -iのすべてのサブレベル下>再帰検索 - - -rは(ここでは適用されない場合があります)>ケースを無視します(大文字小文字を区別しない検索) -l - >ただ、一致を検出したファイル名を印刷します。

man grepページでさらにチェックしてください。

代替置換を実行するためのExモードでVimを使用するもう1つの方法があります。

ex -sc '/TRIGGER/s/user_name/username_actual/|x' file 

はまた、インプレース交換

sed -i '/TRIGGER/s/user_name/username_actual/g' 
+0

ありがとう、それは本当に私の問題を解決しました。 –

+0

答えにgrep paramsを説明できますか?「私」はそこにありますか? –

+0

もしOPがTRIGGER文を含んでいるファイルを知っているならば、なぜ 'grep'を気にするのでしょうか? – ghoti

関連する問題