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

シード

sed '/DROP/ {/INDEX/d; /CONSTRAINT/d}' file
于 2013-05-24T22:53:16.510 に答える
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 に答える