2016-11-17 58 views
1

我有一個大小爲〜220 MB的大型.sql文件。Grep/Sed取代大型.sql文件中的小文本

在我在那個文件中的觸發聲明,它使用比MySQL數據庫用戶不同的用戶

現在,我試圖導入與數據庫,因此試圖導入數據庫時​​,它提供以下錯誤:

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

你能告訴我們你試圖解決這個自己,或者你只是尋找一個免費的手呢? – ghoti

回答

1

您可以使用grepsed的組合進行就地更換,而無需實際打開文件。

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

標誌的目的是: -

-I - >忽略二進制文件,同時對文件做grep。 (可能不適合這裏) -r - 下的目錄 -i的所有子水平>遞歸搜索 - >忽略大小寫(不區分大小寫) -l - >只需打印其中找到匹配的文件名。

查看更多在man grep頁面。

還有一種在Ex模式下使用Vim進行就地替換的一種很酷的替代方法。

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

而且最後一個解決方案使用sed單獨就地更換

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

謝謝,這真的解決了我的問題。 –

+0

你可以在你的答案中解釋grep參數,那裏有什麼「我」? –

+0

如果OP知道哪個文件已經包含TRIGGER語句,爲什麼還要用grep呢? – ghoti