91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用sed從mysqldump全備文件中取出某張表的表結構

發布時間:2021-11-03 17:45:41 來源:億速云 閱讀:310 作者:柒染 欄目:建站服務器

如何用sed從mysqldump全備文件中取出某張表的表結構,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

 如何獲用sed取mysqldump文件里面的表結構內容

  假設原文件內容如下:

[root@demo-init ~]# cat  db1.sql

-- MySQL dump 10.13  Distrib 5.7.29for linux-glibc2.12 (x86_64)

--

-- Host: localhost    Database: db1

-- ------------------------------------------------------

-- Server version   5.7.29-log

 

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

 

--

-- Table structure for table `t1`

--

 

DROP TABLE IF EXISTS `t1`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `t1` (

  `id` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `t1`

--

 

LOCK TABLES `t1` WRITE;

/*!40000 ALTER TABLE `t1` DISABLE KEYS */;

INSERT INTO `t1` VALUES (3306);

/*!40000 ALTER TABLE `t1` ENABLE KEYS */;

UNLOCK TABLES;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

 

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

 

-- Dump completed on 2020-04-12 15:43:52

  用sed取出其中表結構:

[root@demo-init ~]# sed -e '/./{H;d}' -e 'x;/CREATE TABLE `t1`/!d'  db1.sql

DROP TABLE IF EXISTS `t1`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `t1` (

  `id` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*!40101 SET character_set_client = @saved_cs_client */;

   這個取的很不錯,把create table t1的sql語句完整的取到了。它是怎么做到的呢。

   首先,先解釋一下sed的幾個選項。

  • H命令是將當前模式空間中的內容追加至保持空間

  •  d命令是刪除當前模式空間內容(不再傳到標準輸出),并放棄之后的命令,讀取新內容重新執行sed (標紅的很重要)

  •  x:命令把模式空間中的內容與保持空間中的內容進行互換

  • -e選項是執行多個處理動作,等效于;

    有了上面的了解,就可以解釋下面這行命令了。

sed -e '/./{H;d}' -e 'x;/CREATE TABLE `t1`/!d'  db1.sql

  1. /./的意思是正則匹配,.是指任意單個字符,那么這個在這里面的意思就是匹配非空行,即有內容的行

  2. {}這個是命令的集合

  3. 因為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' 的命令

  4. 讀取第二行內容即--放入模式空間中,然后執行命令H,把模式空間中的--追加到保持空間中,這時保持空間的內容就變成了\n-- MySQL dump 10.13 ..\n.--,然后執行命令d把模式空間中的內容--清除掉

  5. 然后一直重復上的步驟,直到第六行,是個空行,不符合/./這個正則表達式,所以第一個-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命令清除掉;

  6. 于是繼續執行,直到遇到create table `t1` 那組(db1.sql每組內容是用空行隔開的),sed就會把保持空間create table t1上下文的內容完整的輸出到屏幕上

     其實,sed這串命令里的關鍵在d命令,它是刪除當前模式空間內容(不再傳到標準輸出),并放棄之后的命令,讀取新內容重新執行sed,我讀完這句話后,才終于想明白了這串sed命令是怎么取到create table t1上下文結果的了。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

中超| 三门峡市| 安陆市| 天峻县| 绥江县| 蓬安县| 霞浦县| 藁城市| 汉川市| 安塞县| 鄂托克前旗| 浦北县| 固原市| 锦州市| 项城市| 名山县| 克山县| 舞阳县| 韶关市| 临湘市| 从化市| 新邵县| 平湖市| 临朐县| 阿拉尔市| 玉树县| 纳雍县| 陕西省| 阳江市| 万年县| 永和县| 奇台县| 鄢陵县| 平泉县| 岑溪市| 襄垣县| 云阳县| 灯塔市| 民权县| 玉树县| 阿坝|