如何从.txt文件中过滤表名

如何从.txt文件中过滤表名
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与 it's -B& -Aflags一起使用

$ 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只有那些具有确切第一个单词的文本块才会被选择。

相关内容