grep을 사용하여 한 줄과 여러 줄에 모두 존재하는 문자열을 검색하는 방법은 무엇입니까?

grep을 사용하여 한 줄과 여러 줄에 모두 존재하는 문자열을 검색하는 방법은 무엇입니까?

데이터 종속성을 찾기 위해 여러 SQL 스크립트를 검색하고 있는데 스크립트 변경으로 인해 흥미로운 문제에 직면했습니다.

단어를 검색하면 FROM해당 단어가 있는 줄만 반환됩니다. 따라서 다음은 첫 번째와 세 번째 줄만 인쇄하는 반면, 세 번째와 네 번째 줄과 함께 첫 번째 줄을 인쇄해야 합니다. 어떤 도움이라도 대단히 감사하겠습니다!

SELECT * FROM TABLE1

SELECT *

FROM

TABLE 2

답변1

SQL 문은 일반적으로 ;.

이 사실을 활용하여 구분된 레코드를 awk읽고 ;각 레코드에 sting이 있는지 테스트할 수 있습니다 FROM. 그러한 레코드가 발견되면 모든 연속 공백을 단일 공백으로 압축하고 모든 줄 바꿈을 단일 공백으로 변경한 후 다음을 출력할 수 있습니다.

$ awk 'BEGIN { RS = ";" } /FROM/ { gsub("\n+|  +", " "); print }' statements.sql

다음 파일을 사용하여 이것을 테스트하십시오.

SELECT * FROM TABLE1;

SELECT *

FROM

TABLE2;

밝혀지다

SELECT * FROM TABLE1
 SELECT * FROM TABLE2

관련 정보