sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `salaries`/!d;q' full.sql > salaries_dump.sql 的個人理解

學習MySQL的過程中遇到一條sed語句臂痕,作用是獲取mysqldump 全備中某表的表結(jié)構(gòu)

root@mysql ~:# sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `salaries`/!d;q' /backups/full_2020-07-01.sql 

DROP TABLE IF EXISTS `salaries`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `salaries` (
  `emp_no` int NOT NULL,
  `salary` int NOT NULL,
  `from_date` date NOT NULL,
  `to_date` date NOT NULL,
  PRIMARY KEY (`emp_no`,`from_date`),
  CONSTRAINT `salaries_ibfk_1` FOREIGN KEY (`emp_no`) REFERENCES `employees` (`emp_no`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

由于該條語句比較復(fù)雜澡绩。研究之后現(xiàn)給出本人的一些分析事镣。

首先找到full.sql中CREATE TABLE `salaries` 前后的一些相關(guān)內(nèi)容


root@mysql ~:# sed -n '/CREATE TABLE `salaries`/{p;=}' /backups/full_2020-07-01.sql

CREATE TABLE `salaries` (

219

該行位于第219行,現(xiàn)過濾其前后10行

root@mysql ~:# sed -n '210,230p'  /backups/full_2020-07-01.sql 
/*!80002 ANALYZE TABLE `employees` UPDATE HISTOGRAM ON `gender` WITH 100 BUCKETS */;

--
-- Table structure for table `salaries`
--

DROP TABLE IF EXISTS `salaries`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `salaries` (
  `emp_no` int NOT NULL,
  `salary` int NOT NULL,
  `from_date` date NOT NULL,
  `to_date` date NOT NULL,
  PRIMARY KEY (`emp_no`,`from_date`),
  CONSTRAINT `salaries_ibfk_1` FOREIGN KEY (`emp_no`) REFERENCES `employees` (`emp_no`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `salaries`

分析該條語句的執(zhí)行過程

sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `salaries`/!d;q' /backups/full_2020-07-01.sql

首先sed -e /./{H;$!d;} 是需要匹配至少一個字符的行铐伴,然后將該行模式空間內(nèi)容追加到保持空間,如果該行不是最后一行就刪除模式空間的所有內(nèi)容玲献,接著讀入下一個非空行驱证。
仔細觀察


DROP TABLE IF EXISTS `salaries`;
/*!40101 SET character_set_client = @saved_cs_client */;

前后都是以空行開始和結(jié)束的。
這時sed -e /./{H;$!d;}是匹配不到任何內(nèi)容的获高,此時就會執(zhí)行-e 'x;/CREATE TABLE `salaries`/!d;q' 語句
命令x是將保持空間的內(nèi)容和模式空間互換摊趾,然后搜索關(guān)鍵字CREATE TABLE `salaries`,如果有關(guān)鍵字則兩個空白行之間的內(nèi)容都會保留肛炮,并且q退出sed語句粟害。如果沒有該關(guān)鍵字就會繼續(xù)將下一個兩空白行之間的內(nèi)容H進保持空間悲幅,繼續(xù)篩選留荔。

總結(jié):該語句實際上執(zhí)行的就是從第一行開始讀入碘勉,只要不是空行就H進保持空間倍宾,然后刪除模式空間內(nèi)容怔锌,繼續(xù)讀入下一行,如果遇到空行就會將模式空間的內(nèi)容和保持空間的內(nèi)容互換(x),然后篩選是否有我們需求的關(guān)鍵字彭羹,如果有我們需要的關(guān)鍵字就會通過(q)命令退出sed語句的執(zhí)行拓轻,(因為該測試中只有employees庫里有該表,具有唯一性枣氧,所以為了執(zhí)行效率,找到該表的建表語句后就可以退出sed的執(zhí)行)并且輸出兩空行之間的所有內(nèi)容种蝶,如果沒有就刪除模式空間的全部內(nèi)容螃征,繼續(xù)從該空行的下一行讀入盯滚,以此循環(huán)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末交排,一起剝皮案震驚了整個濱河市根资,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拉庵,老刑警劉巖钞支,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異操刀,居然都是意外死亡烁挟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門骨坑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撼嗓,“玉大人,你說我怎么就攤上這事欢唾∏揖” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵礁遣,是天一觀的道長斑芜。 經(jīng)常有香客問我,道長祟霍,這世上最難降的妖魔是什么押搪? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮浅碾,結(jié)果婚禮上大州,老公的妹妹穿的比我還像新娘。我一直安慰自己垂谢,他們只是感情好厦画,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滥朱,像睡著了一般根暑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徙邻,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天排嫌,我揣著相機與錄音,去河邊找鬼缰犁。 笑死淳地,一個胖子當著我的面吹牛怖糊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颇象,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼伍伤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了遣钳?” 一聲冷哼從身側(cè)響起扰魂,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蕴茴,沒想到半個月后劝评,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡倦淀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年付翁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晃听。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖砰识,靈堂內(nèi)的尸體忽然破棺而出能扒,到底是詐尸還是另有隱情,我是刑警寧澤辫狼,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布初斑,位于F島的核電站,受9級特大地震影響膨处,放射性物質(zhì)發(fā)生泄漏见秤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一真椿、第九天 我趴在偏房一處隱蔽的房頂上張望鹃答。 院中可真熱鬧,春花似錦突硝、人聲如沸测摔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锋八。三九已至,卻和暖如春护盈,著一層夾襖步出監(jiān)牢的瞬間挟纱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工腐宋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留紊服,地道東北人檀轨。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像围苫,于是被迫代替她去往敵國和親裤园。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353