对不起,如果标题描述性不够,但我真的不知道如何总结它,欢迎任何建议。我写了一段有用的正则表达式来匹配 sql 文件中的行,将数据插入特定的表(包含缓存)。它是这样的:
(--\s--\sDumping\sdata\sfor\stable\s`(cache_\w+|cache)`.*?)(?=(--\n--.+Table\sstructure\sfor\stable\s`.+`.*--))
所以现在当我有这样的文件时:
--
-- Table structure for table `cache_content`
--
something
--
-- Dumping data for table `cache_content`
--
INSERT INTO `cache_content` etc.
--
-- Table structure for table `cache`
--
something
--
-- Dumping data for table `cache`
--
INSERT INTO `cache` etc.
--
-- Table structure for table `notcache`
--
something
--
-- Dumping data for table `notcache`
--
它将所有插入匹配到这些表,我想通过使用删除它们(因为那些是带有缓存的表)sed
,特别是我为此编写了一个简单的 bash 脚本:
REGEX="(--\s--\sDumping\sdata\sfor\stable\s\`(cache_\w+|cache)\`.*?)(?=(--\n--.+Table\sstructure\sfor\stable\s\`.+\`.*--))"
sed -i "s/${REGEX}//g" $1
现在的问题是它在我的正则表达式测试器中工作,但它根本不适用于sed
. sed
根本不改变文件,我很困惑。我在某处读到sed
基于行的内容,但这可能是问题所在,还是其他原因?
补充 #1:如果不可能用sed
什么是好的选择来完成?有什么类似 sed 的东西可以做到吗?