用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysqldump 備份匯出資料排除某張表或多張表MySql
- mysql從一張表中取出資料插入到另一張表MySql
- Mysqldump 匯出表結構異常MySql
- 表`t`的INODE結構檔案分析
- 表`t`的XDES Entry結構檔案分析
- mysql 從 frm 檔案恢復 table 表結構的3種方法MySql
- MySQL複製表結構和內容到另一張表中的SQL語句MySql
- 利用MySQL全備份(mysqldump),如何只恢復一個庫或者一個表?MySql
- 從全備中恢復單庫或單表,小心有坑!
- 查詢mysql某張表中的所有資料(欄位)型別MySql型別
- 關於mysqldump備份非事務表的注意事項MySql
- ar——建立或修改備存檔案,或是從備存檔案中抽取檔案
- sqlserver關於filestream檔案流、filetable檔案表的總結SQLServer
- mysql mysqldump只匯出表結構或只匯出資料的實現方法MySql
- 表的schema 檔案
- sed 修改檔案
- 資料表結構更新後,遷移檔案怎麼使用?
- 表結構遷移檔案Identifier name 'xxxxxx' is too long解決IDE
- PostgreSQL的表檔案以及TOAST表檔案對應關係SQLAST
- mysql中複製表結構的方法小結MySql
- 從備份片中恢復某個指定得歸檔或者資料檔案
- Libevent應用(六)從bufferevent中取出evbuffer
- 類檔案結構_class類檔案的的結構
- 使用sed 命令查詢和替換檔案中的字串的方法總結字串
- SQLSERVER查詢某個資料庫有幾張表SQLServer資料庫
- 【中後臺應用】從表單抽象到表單中臺抽象
- sqlite中存放自定義表結構的位置SQLite
- 如何從 dump 檔案中提取出 C# 原始碼?C#原始碼
- Linux 中sed命令實現從gff檔案中僅僅提取基因名稱Linux
- 從0到1,用張三的故事講述一張中學生也能看懂的財務報表
- sed 將檔案反排
- MySQL主從配置及mysqldump備份MySql
- Hive表小檔案合併方法總結Hive
- mysql 大表mysqldump遷移方案MySql
- Hibernate中實體類對映檔案表與表的關係模版
- 運用sed命令高效地刪除檔案的特定行
- clickhouse如何表結構
- Sql查詢 一個表中某欄位的資料在另一個表中某欄位中不存在的SQL