2010-02-15 7 views
0

SQL 명령이있는 파일이로드되어 있는데 파일에서 모든 데이터베이스 테이블 이름을 추출해야합니다. grep 및 sed를 사용하여 파일을 구문 분석하고 텍스트 파일의 고유 테이블 이름 .. 한 줄에 하나?grep 및 sed 명령

이름 이름 모두 "db_"로 시작하는 것이 편리합니다!

grep과 sed를 함께 사용하여 테이블 이름을 추출하는 가장 좋은 방법은 무엇입니까?

+1

당신은 SQL 파일이 어떻게 생겼는지의 예를 게시 할 수 있습니까? –

+1

sed/grep에서 얻을 수있는 거의 모든 대답은 대부분 당신의 가정에 들어갈 것입니다. 나는. 'db_'를 검색하는 것으로 시작하면, 그것이 실제로 얼마나 정확한지에 관계없이 얻을 것입니다. - 테이블 이름이 아니더라도 그런 식으로 시작하는 모든 문자열이 표시됩니다. 해당 패턴에 맞지 않는 문자열은 테이블을 참조한다고해도 표시되지 않습니다. 불행히도 정답은 (거의) 완전한 SQL 파서를 필요로합니다. –

답변

6

이렇게하면 테이블 이름이 포함 된 행을 검색합니다. ,

grep "\<db_[a-zA-Z0-9_]*" *.sql | sed 's/.*\(\<db_[a-zA-Z0-9_]*\).*/\1/' 

을 그 실행의 일단 : 적절한 검색이 정리되면,

grep "\<db_[a-zA-Z0-9_]*" *.sql 

테이블 이름과 라인에서 다른 모든 문자를 제거 :이의 출력은 신속하게보다 선택 검색이 필요한 경우 발표 할 예정이다 정렬에 추가하고 제거 중복 : 당신은 그냥 grep을 필요

(same last pipe expression) | sort | uniq 
+1

+1. 같은 줄에 여러 테이블 이름을 잠재적으로 잡으려면 tr :'grep .. * .sql | tr '' '\ n'| grep .. | sed'. 첫 번째 grep은'tr'에 대한 부담을 줄이기위한 것이고 두 번째 grep은 비 db_ 부분을 필터링하는 것입니다. – orip

0

,658,656,

또는 AWK

awk '{for(i=1;i<=NF;i++)if($i~/^db_[a-zA-Z0-9]+/){print $i} }' file