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