0

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

DROP (CONSTRAINT|INDEX)

使用 gnu sed,这有效:

gsed -e '/DROP \(CONSTRAINT\|INDEX\)/d' < myfile.sql

但是,相同的命令不适用于 BSD sed(特别是 Mac OS X 10.8.3 附带的 sed 版本)。我将如何使用 BSD sed 做到这一点?

4

3 回答 3

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;
于 2013-05-24T18:13:00.900 回答
1

也许grep对这项工作来说是一个更好的工具:

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

将打印所有不匹配的行。不过,我不确定 OSX 版本是否grep支持grep -E- 它可能会被调用egrep。其中任何一个都适用于 Linux。

于 2013-05-24T19:59:18.220 回答
1

sed

sed '/DROP/ {/INDEX/d; /CONSTRAINT/d}' file
于 2013-05-24T22:53:16.510 回答