使用GREP从sql文件中删除行和以前的逗号

时间:2017-11-12 18:39:40

标签: macos terminal grep

我试图解决这个问题:

  KEY `vehicle_classification_id` (`vehicle_classification_id`),
  CONSTRAINT `BodyStyle_VehicleClassification` FOREIGN KEY 
(`vehicle_classification_id`) REFERENCES `vehicle_classifications` (`id`$
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;

进入这个:

  KEY `vehicle_classification_id` (`vehicle_classification_id`)
(`vehicle_classification_id`) REFERENCES `vehicle_classifications` (`id`$
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;

此SED和GREP COMMAND删除' CONTRAINT'线路,只需要从以前的线路中移除COMMA:

grep -vE ",*CONSTRAINT*" ~/Test.sql > ~/Stripped.sql
sed  -e 's/,*CONSTRAINT.*//' ~/Test.sql 

如果有人知道如何用sed这样做,我会很感激一些指导。谢谢。

2 个答案:

答案 0 :(得分:2)

我不会挂在多行部分上(假设你有几个类似的块,你并没有提供太多的样本数据):

echo '  KEY `vehicle_classification_id` (`vehicle_classification_id`),
  CONSTRAINT `BodyStyle_VehicleClassification` FOREIGN KEY 
(`vehicle_classification_id`) REFERENCES `vehicle_classifications` (`id`$
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;' | tr '\n' '\f' | sed  -e 's/,\f *CONSTRAINT[^\f]*\f/\f/'  | tr '\f' '\n'
  KEY `vehicle_classification_id` (`vehicle_classification_id`)
(`vehicle_classification_id`) REFERENCES `vehicle_classifications` (`id`$
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;

答案 1 :(得分:2)

sed 方法:

sed '/\s*KEY /{ N; s/,\s*CONSTRAINT .*//}' ~/Test.sql > ~/Stripped.sql