或与BSD sed匹配

时间:2013-05-24 17:58:59

标签: macos 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做到这一点?

3 个答案:

答案 0 :(得分:1)

不确定更改,但你可以在BSD Sed中使用几行(我也是,在Mac OS X 10.8.3上,所以可以保证这个命令可以在你的平台上运行):

sed '/DROP \(INDEX\)/d;/DROP \(CONSTRAINT\)/d'

为了测试,我创建了一个纯文本文件:

DROP INDEX a;
DROP CONSTRAINT b;
CREATE TABLE foo;

答案 1 :(得分:1)

或许grep可能是这项工作的更好工具:

grep -v -E 'DROP (CONSTRAINT|INDEX|SEQUENCE|TABLE|EXTENSION|DEFAULT)' file.txt

将打印所有不匹配的行。我不确定grep的OSX版本是否支持grep -E - 它可能会被称为egrep。其中一个可以在Linux上运行。

答案 2 :(得分:1)

SED

sed '/DROP/ {/INDEX/d; /CONSTRAINT/d}' file