select *
from
emp;
select *
from
dept;
selection
end;
私は次のような出力を得たいと思います。
select *
from
emp;
select *
from
dept;
私は以下を使用しようとしています:
awk '/select/{a=1} a; /;/{a=0}' XXARXADLMT.txt
出力:
select *
from
emp;
select *
from
dept;
selection
end;
答え1
これを行う方法はさまざまです。今私が考えているのは、grep
その-B
&-A
フラグを使用することです
$ grep -B 1 -A 1 'from' file.txt
空行が必要な場合は-A
2に設定してください。
答え2
Ziggyが言ったように、何が必要かはわかりませんが、おそらくこのAWKはその効果を発揮します。
awk ' /select \*$/{flag=1;print;next}/selection/{flag=0}flag' file.txt
答え3
コマンドが終了したら、次のことが;
できます。
awk -v RS=";" '/from/' file
「from」の後にテーブル名だけが必要な場合は、試してみてください。
perl -0nE 'say join(";", /from\s+(\w+)/ig)' file
答え4
項目が常に空行で区切られていると仮定すると、次のことができます。
awk 'BEGIN{RS="\n\n"; FS="\n"; OFS="\n"; ORS="\n\n";} {if ($1 ~ /\<select\>/) {print};}' file.txt
入力ファイル:
select *
from
emp;
select *
from
dept;
selection
end;
select something
more
selected
wrong
select
again
*
from class;
出力:
select *
from
emp;
select *
from
dept;
select something
more
select
again
*
from class;
select
正確な最初の単語を含むテキストブロックのみが選択されます。