1
我有我認爲是一個簡單的問題。我有一個佔用幾GB的mysqldump文件,並且我想創建一個腳本,該腳本將只提取與一個表(傳遞給腳本的變量)有關的文本的行,並將其保存到新文件中。Linux CLI:根據搜索從文本文件中提取可變數量的行
我想隨時提取該部分的開頭爲:
-- Table structure for table `myTable`
並始終以結束:
UNLOCK TABLES;
在表格的名字,我想以後的行數是可變的。我能找到段的開始:
START=$(grep -n "Table structure for table \`$2\`" "$1" | awk -F ":" '{print $1}')
哪裏$1
是搜索的文件和$2
是表名。這工作得很好,但後來我卡住了。我知道我可以用sed提取行,只要我有結束行號,但找到結束行號是棘手的部分。
我需要在我的$START
行號後找到第一個出現UNLOCK TABLES;
的行號,而且我對如何做到這一點已失去興趣。
更多詳細信息,這裏的文本的一個部分,我將要提取的例子:
--
-- 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;
在此先感謝。
所以這會在'$ firstLine'後面找到'$ secondLine'的第一次出現? –
是的,它應該。 – chepner
是的工作。謝謝! –