sed:匹配这个逗号或那个,但不能同时匹配两个

sed:匹配这个逗号或那个,但不能同时匹配两个

我有一个巨大的 mysql 转储,我正在使用 sed 删除不需要的行(比从表中删除快得多),并且转储的每一行都采用以下格式

 INSERT INTO table_name VALUES ("somevalue", 0), ("anothervalue", 90), ("nospaces", 67), ("another", 0) ... ;

我只需要整数值为 0 的行,因此我使用以下表达式:

 sed -i 's/, ("[^ ]*", [1-9][0-9]*)//g' dump.sql

但是,这与第一行不匹配(请参阅表达式中的逗号)..无论如何我可以匹配开头或结尾的逗号,但不能同时匹配两者?

答案1

我建议你不要依赖,前面的(),而是依赖后面的 with \?。不管怎样,你有一个还是多个空间并不重要。类似的事情应该为你做:

sed -i 's/("[^ ]*", [1-9][0-9]*),\?//g; s/,\s*;/;/' dump.sql

请注意,这\?意味着这,不是强制字符。如果不存在,仍然会有匹配。

相关内容