我有一个我认为很简单的问题。我有一个占用几 GB 的 mysqldump 文件,我想创建一个脚本,该脚本将仅提取与一个表相关的文本行(传递给脚本的变量)并将它们保存到一个新文件中。
我要提取的部分始终以:
-- Table structure for table `myTable`
并且总是以:
UNLOCK TABLES;
我以后想要的表名和行数是可变的。我能够找到该部分的开头:
START=$(grep -n "Table structure for table \`$2\`" "$1" | awk -F ":" '{print $1}')
$1
要搜索的文件在哪里,$2
是表名。这工作得很好,但后来我被卡住了。我知道一旦我有了结束行号,我就可以用 sed 提取行,但是发现结束行号是棘手的部分。
我需要UNLOCK TABLES;
在我的行号之后找到第一次出现的$START
行号,而我不知道该怎么做。
有关更多详细信息,这是我要提取的一段文本的示例:
--
-- Table structure for table `myTable`
--
DROP TABLE IF EXISTS `myTable`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `myTable` (
`column1` varchar(12) NOT NULL,
`column2` varchar(20) DEFAULT NULL,
PRIMARY KEY (`column1`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `myTable`
--
LOCK TABLES `myTable` WRITE;
/*!40000 ALTER TABLE `myTable` DISABLE KEYS */;
INSERT INTO `myTable` VALUES ('test11', 'test12'),('test21', 'test22');
/*!40000 ALTER TABLE `myTable` ENABLE KEYS */;
UNLOCK TABLES;
提前致谢。