OR matches with BSD sed



我试图过滤掉文件中匹配正则表达式的行:

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

最新更新