다음 내용이 포함된 파일이 있습니다.
select *
from
emp;
select *
from
dept;
selection
end;
나는 다음과 같은 출력을 얻고 싶습니다.
select *
from
emp;
select *
from
dept;
나는 사용하려고
awk '/SELECT/{a=1} a; /;/{a=0}' XXARXADLMT.txt
그러나 그것은 작동하지 않았습니다.
답변1
파일이 삽입한 파일보다 긴 경우에도 작동합니다.
while read line; do
if [[ "$line" == "select *" ]]; then
echo "$line"
read line
echo "$line"
read line
echo "$line"
fi
done < XXARXADLMT.txt
또는 중복 항목을 다음으로 바꿀 수 있습니다 read line; echo $line;
.
for i in {1..2}; do read line; echo $line; done
답변2
내가 올바르게 이해했다면 스크립트에는 두 가지 문제가 있습니다.
- 대소문자를 구분합니다.
- 긴 단어의 일부를 일치시킵니다.
또한 변수를 설정하는 대신 쉼표 연산자를 사용할 수 있습니다.
결론적으로 다음 사항이 요구 사항을 충족해야 합니다.
awk -v IGNORECASE=1 '/select /,/;/' XXARXADLMT.txt
답변3
perl -00 -n -e 'print if (m/select /i)' XXARXADLMT.txt
이는 단락 읽기 모드(옵션)를 사용하여 perl
대소문자를 구분하지 않는 정규식(후행 공백 포함) -00
과 일치하는 단락 만 인쇄합니다.select
"단락"은 1개 이상의 빈 줄로 구분된 텍스트 블록입니다.
산출:
select *
from
emp;
select *
from
dept;
(출력 끝에 또 다른 빈 줄이 있지만 HTML의 모호함과 이 사이트의 코드 형식으로 인해 여기에 표시되지 않습니다.)