내 데이터베이스 서버(유닉스 박스)에 SQL 파일이 있습니다. 테이블의 특정 열을 사용하는 *.sql 파일을 찾으려고 합니다. 예를 들어 내용은 my_dir/SALES_TERRITORY.sql
다음과 같습니다.
Select segment1,segment2
from HZ_CUST_SITE_USES_ALL
where territory_id = :p_territory_id;
따라서 내 요구 사항은 명령을 실행할 때 "HZ_CUST_SITE_USES_ALL"과 "territory_id"의 조합이 있는 모든 파일을 가져와야 한다는 것입니다.
인터넷 검색을 통해 다음을 수행했지만 원하는 결과를 얻지 못했습니다.
grep -i "HZ_CUST_SITE_USES_ALL\|TERRITORY_ID" *
내 기대는 위의 명령이 나에게 다음과 같은 결과를 줄 것이라는 것입니다
grep -i "HZ_CUST_SITE_USES_ALL\|TERRITORY_ID" my_dir/*
SALES_TERRITORY.sql
어떤 도움이라도 대단히 감사하겠습니다.
인사,
답변1
파일 이름만 나열하려면 아래와 같이 grep을 사용하십시오(-엘):("-최대 깊이 0"는 my_dir 아래에서만 확인되며 그 안에 있는 하위 디렉터리는 확인되지 않습니다. 하위 디렉터리도 확인하려면 해당 디렉터리를 제거하면 됩니다.)
파일 이름에 공백이 있으면 다음을 사용할 수 있습니다.
find ./* -maxdepth 0 -type f -exec grep -qi "HZ_CUST_SITE_USES_ALL" {} \; -and -exec grep -li "TERRITORY_ID" {} \;
Solaris용으로 편집:
find ./* -prune -type f -exec /usr/xpg4/bin/grep -qi "HZ_CUST_SITE_USES_ALL" {} \; -a -exec /usr/xpg4/bin/grep -li "TERRITORY_ID" {} \;
파일 이름 사이에 공백이 없다고 확신하는 경우 다음과 같이 간단한 for 루프를 사용할 수 있습니다.
for file in $(find my_dir/* -maxdepth 0 -type f)
do
grep -qi "HZ_CUST_SITE_USES_ALL" "$file" && grep -il "TERRITORY_ID" "$file";
done
답변2
다음 방법을 사용하여 이 작업을 수행할 수 있습니다.
grep -w "HZ_CUST_SITE_USES_ALL|TERRITORY_ID" file.txt
답변3
grep이 PCRE 확장을 지원하는 경우 다음을 사용할 수 있습니다.
grep -iP '(?s)(?=.*HZ_CUST_SITE_USES_ALL)(?=.*territory_id)' infile