내가 사용하는 명령은 다음과 같습니다.
find . -type f -name "*.sql" -exec grep -i -l 'schema_name.' {} +
내가 검색하고 싶은 것은 모두 포함되어 있습니다 schema_name.
. 그러나 find 명령은 마지막 것을 무시 하고 대신 그것을 .
찾습니다 .schema_name
schema_name.
답변1
그게 grep
문제야, 아니야 find
.
grep
기본적으로 정규식은 schema_name.
문자열 뒤의 모든 문자를 나타내는 패턴을 일치시키는 데 사용됩니다 schema_name
.
점을 문자 그대로 일치시키려면 .
백슬래시를 사용하여 점을 이스케이프 처리해야 합니다 \
.
find . -type f -name "*.sql" -exec grep -il 'schema_name\.' {} +
또는 -F
다음 옵션을 사용하세요.
find . -type f -name "*.sql" -exec grep -Fil 'schema_name.' {} +
답변2
fgrep을 사용할 수 있습니다.
find . -type f -name "*.sql" -exec fgrep -i -l 'schema_name.' {} +
아마도 이전 Unix OS에서 훨씬 더 빠를 것입니다(fgrep, grep 및 egrep는 3개의 다른 실행 파일이었고 fgrep은 정규식과 관련된 모든 것을 완전히 생략했기 때문에 훨씬 더 빨랐습니다. 예를 들어 GNU 기반 시스템에서 이 세 프로그램은 동일한 실행 파일에 대한 링크일 뿐입니다.) ).
답변3
검색 패턴의 이스케이프 도트 grep
:
find . -type f -name "*.sql" -exec grep -i -l 'schema_name\.' {} +
답변4
grep 명령이 검색 문자열의 마침표를 무시하는 이유는 무엇입니까?
그러나 실제로는 그렇지 않습니다.
증명하려면 실행하세요.
grep . file
빈 줄을 모두 제거하는 쉬운 방법은 다음과 같습니다 file
.
즉, .
단일 문자(개행 제외)에 대한 정규식 원자입니다. 문자 그대로 점을 일치시키려면 원자를 다음과 같이 이스케이프해야 합니다.\.