디렉토리의 모든 파일에서 문자열 찾기

디렉토리의 모든 파일에서 문자열 찾기

{{text}}모든 파일에서 찾고 새 파일에서 빨간색을 찾고 싶습니다 . 시도해 보았지만 나에게는 효과가 없습니다

find . -type f -not -name "*.dll" -not -name "*.zip" -exec cat {} \; |
    grep "\{.*" | cut -d "{" -f1 | sort | uniq > keys.txt

답변1

나는 당신이 이것을 찾고 있다고 생각합니다 :

grep -FIrho '{{text}}' . >/tmp/keys.txt
mv -f /tmp/keys.txt .

.dll또는 제외 항목 과 파일이 정말로 필요한 경우 .zip다음과 같을 수 있습니다.

find . \( -name '*.zip -o -name '*.dll' \) -prune -o -type f -exec grep -Fho '{{text}}' {} + >/tmp/keys.txt
mv -f /tmp/keys.txt .

여기 keys.txt에는 0개 이상의 줄이 포함됩니다 {{text}}. 일치하는 내용 대신 파일 이름을 기록하도록 하시겠습니까? 아니면 전체 라인이 {{text}}존재할까요?

답변2

grep 셸과 매직을 통해 재귀적으로 호출하는 것 외에도 find일부 프로그램은 어려운 작업을 수행할 수 있습니다.

예를 들어, silversearcher-ag(https://geoff.greer.fm/ag/) 또는 확인(https://beyondgrep.com/),그렇게 간단합니다:

ack '{{text}}'

또는

ag '{{text}}'

이러한 도구의 장점은 기본적으로 바이너리나 디렉터리(예: 등) 검색을 피하고 .git루프 .svn호출보다 훨씬 빠르다는 것입니다.grep

이러한 도구는 주요 GNU/Linux 배포판의 저장소에 존재합니다.

관련 정보