現在、既存のデータベース スキーマを Postgresql に移植しています。
「go」という単語をセミコンマに置き換える必要があります。
「go」という単語がテキストに次のパターンで表示されていることに気付きました。
- [空でない文字列 (SQL)]
- [1 つまたは複数の改行が続く]
- [1 つ以上の空白が続く]
- [「行く」という言葉が続く]
- [1 つ以上の新しい行が続く]
上記のパターンを次のパターンに置き換えたい:
- [空でない文字列 (SQL)]
- [に続く ';']
- [2 つの新しい行が続く]
上記の置換を実行するために、sedで使用できる正規表現を構築しようとしていますが、正規表現は比較的初めてです。
明確にするために、実現したい置換の前後にサンプルテキストを含めました。
-- Original File contents below -------
go
CREATE TABLE foobar
(
f1 INT,
f2 INT,
f3 FLOAT,
f4 VARCHAR(32) NOT NULL,
f5 INT,
f6 datetime,
f7 smallint
)
go
GRANT UPDATE, INSERT, DELETE, SELECT ON foobar TO dbusr
go
CREATE UNIQUE INDEX idxu_foobar ON foobar (f1, f2)
go
--- REPLACED FILE CONTENTS -----------
go
CREATE TABLE foobar
(
f1 INT,
f2 INT,
f3 FLOAT,
f4 VARCHAR(32) NOT NULL,
f5 INT,
f6 datetime,
f7 smallint
);
GRANT UPDATE, INSERT, DELETE, SELECT ON foobar TO dbusr;
CREATE UNIQUE INDEX idxu_foobar ON foobar (f1, f2);
これを達成するために使用する式を誰でも手伝ってくれるので、実行できます:
sed -i 's/original_match_expr/replacement_expr/g' myfile.sql