用sed從mysqldump全備檔案中取出某張表的表結構
最近,看了一篇部落格,寫的是用sed取mysqldump檔案裡面的表結構內容,想了好長時間才明白是怎麼回事,特此記錄一下。
原博文地址: https://blog.csdn.net/u011156496/article/details/83308807
假設原檔案內容如下:
用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上下文結果的了。
不知道我描述清楚了嗎。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28916011/viewspace-2685707/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何從MySQL全庫備份的dump檔案中恢復某張表和表結構MySql
- mysqldump 備份匯出資料排除某張表或多張表MySql
- 從MySQL全庫備份中恢復某個庫和某張表MySql
- 獲取某張表的表結構
- mysql從一張表中取出資料插入到另一張表MySql
- 從全備份的SQL語句中恢復某張表 [原創]SQL
- mysqldump如何只備份表結構MySql
- mysqldump 備份單張表和恢復MySql
- Mysqldump 匯出表結構異常MySql
- Mysql匯出表結構及表資料 mysqldump用法MySql
- MYSQL建立多張表,相同表結構,不同表名MySql
- 【Mysql】Mysql從frm檔案裡恢復表結構MySql
- 表`t`的INODE結構檔案分析
- 從mysqldump全備獲取指定庫的sqlMySql
- mysql 從 frm 檔案恢復 table 表結構的3種方法MySql
- MYSQL 匯出資料庫中某張表的部分數…MySql資料庫
- oracle建立一張與其他表相同表結構的空表Oracle
- PE檔案結構(四) 輸出表
- MySQL複製表結構和內容到另一張表中的SQL語句MySql
- 表`t`的XDES Entry結構檔案分析
- 【Mysql】mysqldump全備中還原指定的庫MySql
- 表空間不完全恢復(全備--備份控制檔案--刪除表空間andy--日誌檔案)
- 從全備中恢復單庫或單表,小心有坑!
- 查詢mysql某張表中的所有資料(欄位)型別MySql型別
- Mysql如何讀.frm結尾的表結構定義檔案MySql
- 【Mysql】恢復slave上某幾張表的方法MySql
- 未刪除的表結構從ibdata1檔案進行恢復
- rhel5 mysqldump使用_匯出表結構_資料_結構及資料MySql
- 不完全恢復(全備--備份控制檔案--新建表空間andy--日誌檔案)
- 利用MySQL全備份(mysqldump),如何只恢復一個庫或者一個表?MySql
- goldengate 過濾對某張表的複製操作Go
- 檢視sqlite中的表結構SQLite
- 課時7-備份與恢復----從dump檔案中找出單個表的資訊
- 通過替換frm檔案方式修改表結構
- 表結構匯出到excel中Excel
- sed 取消檔案中的換行符
- 關於mysqldump備份非事務表的注意事項MySql
- Oracle中的表結構匯出到wordOracle