您好,登錄后才能下訂單哦!
如何用sed從mysqldump全備文件中取出某張表的表結構,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
如何獲用sed取mysqldump文件里面的表結構內容
假設原文件內容如下:
|
用sed取出其中表結構:
|
這個取的很不錯,把create table t1的sql語句完整的取到了。它是怎么做到的呢。
首先,先解釋一下sed的幾個選項。
H命令是將當前模式空間中的內容追加至保持空間
d命令是刪除當前模式空間內容(不再傳到標準輸出),并放棄之后的命令,讀取新內容重新執行sed (標紅的很重要)
x:命令把模式空間中的內容與保持空間中的內容進行互換
-e選項是執行多個處理動作,等效于;
有了上面的了解,就可以解釋下面這行命令了。
sed -e '/./{H;d}' -e 'x;/CREATE TABLE `t1`/!d' db1.sql
/./的意思是正則匹配,.是指任意單個字符,那么這個在這里面的意思就是匹配非空行,即有內容的行
{}這個是命令的集合
因為sed是逐行處理文本的,一開始把第一行內容即-- MySQL dump 10.13 ....放在模式空間中,然后用H命令把-- MySQL dump 10.13 ...追加保持空間中,保持空間(默認存放個\n)存的內容就變成了\n-- MySQL dump 10.13 ...,接下來執行d命令,把模式空間中的內容-- MySQL dump 10.13 ...刪掉,并不再執行后面 -e 'x;/CREATE TABLE `t1`/!d' 的命令
讀取第二行內容即--放入模式空間中,然后執行命令H,把模式空間中的--追加到保持空間中,這時保持空間的內容就變成了\n-- MySQL dump 10.13 ..\n.--,然后執行命令d把模式空間中的內容--清除掉
然后一直重復上的步驟,直到第六行,是個空行,不符合/./這個正則表達式,所以第一個-e后的命令不執行,但是第二個-e后面的命令 'x;/CREATE TABLE `t1`/!d' 開始執行。先執行x命令,它的意思是要把模式空間中的的內容與保持空愛你中的內容進行互換,那也就是把模式空間的空內容和保持空間中的\n-- MySQL dump 10.13 ...\n–\n–Table structure.....交換,這樣模式空間就有內容了,模式空間的內容執行/CREATE TABLE `t1`/!d命令,因為此時模式空間里面的內容不符合正則表達式/CREATE TABLE `t1`/,所以就要把模式空間中的內容用d命令清除掉;
于是繼續執行,直到遇到create table `t1` 那組(db1.sql每組內容是用空行隔開的),sed就會把保持空間create table t1上下文的內容完整的輸出到屏幕上
其實,sed這串命令里的關鍵在d命令,它是刪除當前模式空間內容(不再傳到標準輸出),并放棄之后的命令,讀取新內容重新執行sed,我讀完這句話后,才終于想明白了這串sed命令是怎么取到create table t1上下文結果的了。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。