我试图过滤掉文件中匹配正则表达式的行:
DROP (CONSTRAINT|INDEX)
对于gnu sed,这可以工作:
gsed -e '/DROP (CONSTRAINT|INDEX)/d' < myfile.sql
但是,相同的命令不适用于BSD sed(特别是Mac OS X 10.8.3附带的sed版本)。我该如何在BSD sed中做到这一点呢?
sed
sed '/DROP/ {/INDEX/d; /CONSTRAINT/d}' file
不确定更改,但您可以在BSD Sed中使用几行(我也使用Mac OS X 10.8.3,因此可以保证此命令将在您的平台上工作):
sed '/DROP (INDEX)/d;/DROP (CONSTRAINT)/d'
为了进行测试,我创建了一个纯文本文件:
DROP INDEX a;
DROP CONSTRAINT b;
CREATE TABLE foo;
也许grep
更适合这个工作:
grep -v -E 'DROP (CONSTRAINT|INDEX|SEQUENCE|TABLE|EXTENSION|DEFAULT)' file.txt
将打印所有不匹配的行。我不确定OSX版本的grep
是否支持grep -E
,但它可能被称为egrep
。