.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 

그러나 그것은 작동하지 않았습니다.

답변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의 모호함과 이 사이트의 코드 형식으로 인해 여기에 표시되지 않습니다.)

관련 정보