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
정확한 첫 번째 단어가 포함된 텍스트 블록만 선택됩니다.