正規表現に一致するファイル内の行を除外しようとしています:
DROP (CONSTRAINT|INDEX)
gnu sed を使用すると、次のように動作します。
gsed -e '/DROP \(CONSTRAINT\|INDEX\)/d' < myfile.sql
ただし、同じコマンドは BSD sed (具体的には、Mac OS X 10.8.3 に同梱されているバージョンの sed) では機能しません。BSD sed でこれを行うにはどうすればよいですか?
sed '/DROP/ {/INDEX/d; /CONSTRAINT/d}' file
変更についてはわかりませんが、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 で動作します。