Macos 或与BSD sed匹配

Macos 或与BSD sed匹配,macos,sed,Macos,Sed,我试图筛选出文件中与正则表达式匹配的行: DROP (CONSTRAINT|INDEX) 使用gnu sed时,这项功能可以: gsed -e '/DROP \(CONSTRAINT\|INDEX\)/d' < myfile.sql gsed-e'/DROP\(约束\|INDEX\)/d'

我试图筛选出文件中与正则表达式匹配的行:

DROP (CONSTRAINT|INDEX)
使用gnu sed时,这项功能可以:

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

但是,同样的命令不适用于BSD sed(特别是Mac OS X 10.8.3附带的sed版本)。如何使用BSD sed执行此操作?

不确定是否需要更改,但您可以在BSD sed中使用几行代码(我也在Mac OS X 10.8.3上,因此可以保证此命令将在您的平台上运行):

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

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

不确定是否需要更改,但您可以在BSD Sed中使用几行代码(我也在Mac OS X 10.8.3上,因此可以保证此命令将在您的平台上工作):

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

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
。这两种方法中的任何一种都可以在Linux上运行。

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

grep -v -E 'DROP (CONSTRAINT|INDEX|SEQUENCE|TABLE|EXTENSION|DEFAULT)' file.txt
将打印所有不匹配的行。我不确定OSX版本的
grep
是否支持
grep-E
,但它可能被称为
egrep
。其中任何一种都可以在Linux上运行。

sed 塞德
看起来它会工作,但我实际上想做“DROP(约束|索引|序列|表|扩展|默认)”,使用这种语法会非常详细。看起来它会工作,但我实际上想做“DROP(约束|索引|序列|表|扩展|默认)”,使用这种语法会非常详细。这是一个很好的解决方案,但我真的只是想知道,这种事情在BSD sed中是否可行。这是一个很好的解决方案,但我真的只是想知道这种事情在BSD sed中是否可行。