我有一个巨大的 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
请注意,这\?
意味着这,
不是强制字符。如果不存在,仍然会有匹配。