2011-06-27 116 views
2

我有一個sql轉儲文件,我想從中提取Insert語句。我正在嘗試使用awk來做到這一點。使用awk從文件中提取行

插入語句跨越多行。他們從INSERT開始,以分號結尾。

我已經嘗試使用:

awk '/INSERT*;/' dump.sql 

但它不工作。這樣做的正確方法是什麼? (我的google-fu在這個上失敗了)

謝謝!

+0

如果您的轉儲在數據中不包含分號,您可以嘗試設置'FS =;'在SQL語句上拆分記錄。 – sarnold

+0

正則表達式錯誤,應該是'/ INSERT。*; /',或者更好'/^INSERT。*; $ /'。我檢查過我的MySQL轉儲沒有跨越多行,也許只是在你的編輯器中進行軟包裝? –

+0

。*符號是有道理的,但似乎不起作用。轉儲文件絕對使用分號作爲分隔符。當我轉儲轉儲文件時,* *會跨越多行。 (我寧願不使用'^'和'$',因爲它似乎前後可能有空格)。 – Akshay

回答

3

匹配多行:

/^INSERT/, /.*;/ {print} 

運行在ideone here

+0

雙'/ x /,/ y /'匹配是什麼意思?你能提供一些解釋這種語法的鏈接嗎?謝謝! – Akshay

+0

@Aku http://sunsite.ualberta.ca/Documentation/Gnu/gawk-3.1.0/html_chapter/gawk_8.html#SEC110 –

+0

「雙/ x /,/ y /匹配的含義是什麼」這被稱爲「線尋址「。它意味着打印從INSERT開始的行到結束於的行; – cdarke

0

我想你只是想念一個「。」在awk '/INSERT.*;/' dump.sql

+0

不是,那也行不通... – Akshay