我正在尝试过滤掉与正则表达式匹配的文件中的行:
DROP (CONSTRAINT|INDEX)
使用gnu sed,这可行:
gsed -e '/DROP \(CONSTRAINT\|INDEX\)/d' < myfile.sql
但是,同样的命令不适用于BSD sed(具体来说,Mac OS X 10.8.3附带的sed版本)。我如何用BSD sed做到这一点?
答案 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 '/DROP/ {/INDEX/d; /CONSTRAINT/d}' file