我有一個sql轉儲文件,我想從中提取Insert語句。我正在嘗試使用awk
來做到這一點。使用awk從文件中提取行
插入語句跨越多行。他們從INSERT
開始,以分號結尾。
我已經嘗試使用:
awk '/INSERT*;/' dump.sql
但它不工作。這樣做的正確方法是什麼? (我的google-fu在這個上失敗了)
謝謝!
我有一個sql轉儲文件,我想從中提取Insert語句。我正在嘗試使用awk
來做到這一點。使用awk從文件中提取行
插入語句跨越多行。他們從INSERT
開始,以分號結尾。
我已經嘗試使用:
awk '/INSERT*;/' dump.sql
但它不工作。這樣做的正確方法是什麼? (我的google-fu在這個上失敗了)
謝謝!
像這樣的東西(或什麼@belisarius建議)工作原理:
awk '{ if ($1 ~ /^\s*INSERT/) print $0 ";" }' RS=";" dump.sql
設置記錄分隔符非常簡單並且有詳細記錄:
http://www.gnu.org/software/gawk/manual/html_node/Multiple-Line.html
我似乎無法在@ belisarius的解決方案中找到雙匹配的參考,但我更喜歡它。
如果您的轉儲在數據中不包含分號,您可以嘗試設置'FS =;'在SQL語句上拆分記錄。 – sarnold
正則表達式錯誤,應該是'/ INSERT。*; /',或者更好'/^INSERT。*; $ /'。我檢查過我的MySQL轉儲沒有跨越多行,也許只是在你的編輯器中進行軟包裝? –
。*符號是有道理的,但似乎不起作用。轉儲文件絕對使用分號作爲分隔符。當我轉儲轉儲文件時,* *會跨越多行。 (我寧願不使用'^'和'$',因爲它似乎前後可能有空格)。 – Akshay