我正在尝试过滤掉文件中与正则表达式匹配的行:
DROP (CONSTRAINT|INDEX)
使用 gnu sed,这有效:
gsed -e '/DROP \(CONSTRAINT\|INDEX\)/d' < myfile.sql
但是,相同的命令不适用于 BSD sed(特别是 Mac OS X 10.8.3 附带的 sed 版本)。我将如何使用 BSD sed 做到这一点?
不确定更改,但您可以在 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
。其中任何一个都适用于 Linux。
sed '/DROP/ {/INDEX/d; /CONSTRAINT/d}' file