【发布时间】:2019-07-20 01:46:45
【问题描述】:
DROP TABLE IF EXISTS `qalnk`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `qalnk` (
`id` bigint(20) NOT NULL,
`answer_id` bigint(20) DEFAULT NULL,
`date_deleted` bigint(20) DEFAULT NULL,
`deleted_by_user_ap_id` varchar(36) DEFAULT NULL,
`expression_id` bigint(20) DEFAULT NULL,
`expression_type` varchar(255) DEFAULT NULL,
`ordering` int(11) DEFAULT NULL,
`question_id` bigint(20) DEFAULT NULL,
`expression_for_deselect_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK6661B19F393DFCD` (`expression_id`),
KEY `FK6661B195182DDCD` (`question_id`),
KEY `FK6661B195742A56B` (`expression_for_deselect_id`),
KEY `idx_qlnk_nswrd` (`answer_id`),
KEY `FK6661B19126D878D` (`answer_id`),
KEY `FK6661B1975B33071` (`id`),
CONSTRAINT `FK6661B19126D878D` FOREIGN KEY (`answer_id`) REFERENCES `ans` (`id`),
CONSTRAINT `FK6661B1975B33071` FOREIGN KEY (`id`) REFERENCES `apobj` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
我的目标是从数据库中删除所有约束,所以我想对单词“CONSTRAINT”进行简单的代码搜索并删除该行
我尝试使用 sed
sed '/\s*CONSTRAINT/d' ~/Downloads/dump.sql > ~/ouput.sql
但是由于 CONSTRAINTS 是最后一个语句,所有这些尾随逗号都被留下了。我不介意它是 awk、sed 还是一些常用工具。
想要的输出是
DROP TABLE IF EXISTS `qalnk`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `qalnk` (
`id` bigint(20) NOT NULL,
`answer_id` bigint(20) DEFAULT NULL,
`date_deleted` bigint(20) DEFAULT NULL,
`deleted_by_user_ap_id` varchar(36) DEFAULT NULL,
`expression_id` bigint(20) DEFAULT NULL,
`expression_type` varchar(255) DEFAULT NULL,
`ordering` int(11) DEFAULT NULL,
`question_id` bigint(20) DEFAULT NULL,
`expression_for_deselect_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK6661B19F393DFCD` (`expression_id`),
KEY `FK6661B195182DDCD` (`question_id`),
KEY `FK6661B195742A56B` (`expression_for_deselect_id`),
KEY `idx_qlnk_nswrd` (`answer_id`),
KEY `FK6661B19126D878D` (`answer_id`),
KEY `FK6661B1975B33071` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
【问题讨论】:
-
对你的解决方案稍作修改:sed '/CONSTRAINT/d' ~/Downloads/dump.sql > ~/ouput.sql
-
@josifoski:虽然您的建议确实是 OP 的
sed命令的更简单(非冗余)等效,但在这种情况下,更好的选择可能是sed '/^\s*CONSTRAINT /d'- 即,anchor 行首的表达式(请注意,\s的使用假定 GNUsed; 与 mandatory 前面的空格你需要sed '/^\s\+CONSTRAINT /d')。