중복을 무시하고 현재 디렉터리의 파일에서 문자열을 검색합니다.

중복을 무시하고 현재 디렉터리의 파일에서 문자열을 검색합니다.

중복된 줄을 반복하지 않고 특정 문자열과 일치하는 줄을 인쇄하는 줄을 작성하고 싶다고 가정해 보겠습니다. 현재 디렉터리의 파일에서 해당 문자열을 검색하고 싶습니다.

grep mystring ***What to put here?** | sort | uniq

현재 디렉토리 파일을 모두 검색하는 방법은 무엇입니까?

답변1

find . ! -name . -prune -type f -exec cat {} + |
  grep mystring |
  LC_ALL=C sort -u

또는:

find . ! -name . -prune -type f -exec cat {} + | awk '
  /mystring/ && !seen[$0]++'

GNU 사용 grep:

LC_ALL=C grep -hr --exclude-dir='?*' mystring | LC_ALL=C sort -u

또는 zshGNU를 사용하면 다음과 같습니다 grep.

grep -h mystring ./*(D.) | LC_ALL=C sort -u

하위 디렉터리에 있는 파일을 재귀적으로 검색할 수도 있습니다.

find . -type f -exec cat {} + |
  grep mystring |
  LC_ALL=C sort -u

또는:

find . -type f -exec cat {} + | awk '
  /mystring/ && !seen[$0]++'

GNU 사용 grep:

grep -hr mystring | LC_ALL=C sort -u

이러한 모든 솔루션은 숨겨진 파일(및 숨겨진 디렉터리의 파일)도 확인하지만 비정규 파일은 확인하지 않으며 심볼릭 링크를 따르지 않습니다(일부 이전 버전의 GNU를 사용하지 않는 한 grep) -r.

관련 정보