
ファイルに次の入力がありますsacro.sql
:
{ TABLE "informix".sacro_log row size = 64 number of columns = 3 index size = 0 }
{ unload file name = sacro00518.unl number of rows = 0 }
create table "informix".sacro_log
(
log_id serial not null constraint "informix".nnc_sac_log00,
log_type integer,
log_data text
);
revoke all on "informix".sacro_log from "public" as "informix";
上記の2行目「create table "informix".sacro_log」をtestに置き換えたい
私が望む出力例:
{ TABLE "informix".sacro_log row size = 64 number of columns = 3 index size = 0 }
test
create table "informix".sacro_log
(
log_id serial not null constraint "informix".nnc_sac_log00,
log_type integer,
log_data text
);
revoke all on "informix".sacro_log from "public" as "informix";
答え1
sed '/create table "informix"/i\
test
' data.in >data.out
data.out
次の内容が作成されます。
{ TABLE "informix".sacro_log row size = 64 number of columns = 3 index size = 0 }
{ unload file name = sacro00518.unl number of rows = 0 }
test
create table "informix".sacro_log
(
log_id serial not null constraint "informix".nnc_sac_log00,
log_type integer,
log_data text
);
i
の ("insert") コマンドは、一致sed
したパターンの前に指定されたテキストを挿入します。挿入されるテキストは、リテラルな改行の後に続く必要があります (GNUもsed
受け入れますsed '/pattern/i text'
)。
答え2
まだ回答を待っているかどうかは分かりませんが、これが役に立つかもしれません。
awk -v newline=test -v trigger='create table "informix"' '
{a[NR]=$0}
NR>2 { if (index($0,trigger)>0) { a[NR-2]=newline; }}
END {
for (i=1;i<=NR;i++) { print a[i] }
}
' sacro.sql