文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何用sed从mysqldump全备文件中取出某张表的表结构

2023-06-05 14:46

关注

如何用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

 

;

;

;

;

;

;

;

;

;

;

 

--

-- Table structure for table `t1`

--

 

DROP TABLE IF EXISTS `t1`;

;

;

CREATE TABLE `t1` (

  `id` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

;

 

--

-- Dumping data for table `t1`

--

 

LOCK TABLES `t1` WRITE;

;

INSERT INTO `t1` VALUES (3306);

;

UNLOCK TABLES;

;

 

;

;

;

;

;

;

;

 

-- 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`;

;

;

CREATE TABLE `t1` (

  `id` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

;

   这个取的很不错,把create table t1的sql语句完整的取到了。它是怎么做到的呢。

   首先,先解释一下sed的几个选项。

    有了上面的了解,就可以解释下面这行命令了。

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上下文结果的了。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯