파일의 내용을 찾는 방법은 무엇입니까?

파일의 내용을 찾는 방법은 무엇입니까?

이름에 문자 "a"가 포함된 파일의 내용을 어떻게 표시합니까? 나는 노력했다 cat|ls|grep 'a'

답변1

이것은 작동합니다:

find . -type f -name '*a*' -exec cat {} \;

답변2

Paginator에는 less여러 파일을 찾아보고 파일 사이를 이동할 수 있는 기능이 있으므로 모든 파일이 동일한 디렉터리에 있으면 less *a*첫 번째 파일이 먼저 열리고 :nGo to the 이전 파일을 입력하세요 :p. =입력할 때마다 현재 파일의 이름이 표시됩니다. 이 less호출기에는 녹음된 다른 유용한 기능이 많이 있지만 덜 일반적으로 사용되는 기능이 있습니다. 프로그램에서 h여러 페이지로 구성된 긴 치트 시트를 입력하세요.

find -type f -maxdepth 1 -name '*a*' -exec less '{}' +

답변3

이 짧은 버전은 모든 파일이 동일한 디렉터리에 있는 경우 이 작업을 수행합니다.

cat *a*

의 경우흥미로운"-" 및 "./"로 시작하는 파일 이름 앞에는 다음이 추가되어야 합니다.

cat ./*a*

디렉토리는 a무해한 오류 메시지를 생성합니다.

답변4

모든 콘텐츠 출력정기적인이름에 다음 문자가 포함된 현재 디렉터리의 a파일 :

find . ! -name . -prune -name '*a*' -type f -exec cat {} +

여러 구현이 있지만 find(Ubuntu의 GNU 구현 포함) 현재 로케일에서 유효한 문자를 형성하지 않는 바이트 시퀀스를 이름에 포함하는 파일은 제외됩니다.

일부 구현의 경우 표준 대신 find사용할 수 있습니다 . GNU와 같은 일부 구현에서는 깊이 0이 및에서 제외 되므로 여기에서는 충분 합니다 .-depth 1! -name . -prunefind-mindepth 1 -maxdepth 1-maxdepth 1.-type f-name '*a*'

잘못된 문자 문제는 zsh다음을 사용하여 완화할 수 있습니다.

cat ./*a*(D.)

이는 또한 오류를 보고하고 일치하는 파일이 없는 경우 파일 목록을 정렬하여 출력이 덜 무작위화된다는 이점이 있습니다.

일반 파일에 대한 심볼릭 링크도 포함하려면 zsh glob 한정자에 옵션을 추가하세요 -L.find-

숨겨진 파일을 제외하려면 zsh의 glob qualifier에서 해당 파일을 ! -name '.*'추가 하거나 제거하세요 find.D

이 파일들은 연결 cat되어 있습니다. a1Contains foo에 후행 줄 바꿈( a1올바른 텍스트 파일인 경우 발생해서는 안 됨)이 없고 a2가 포함된 경우 bar출력은 입니다 foobar.

파일 이름을 포함하려면 각 줄 앞에 파일 이름을 추가하여 바꿀 수 있습니다 grep '^' /dev/null. cat또는 grep -n '^' /dev/null줄 번호도 포함하세요.

GNU 구현을 사용하면 head(Ubuntu에서와 같이) head -vc-0이를 사용하여

===> ./file_with_a <===

파일 헤더와 각 파일 사이에 빈 줄이 있습니다.

관련 정보