grep을 사용하여 디렉터리(인수로 제공됨) 또는 해당 하위 디렉터리에서 확장자가 .txt인 파일의 내용만 표시합니다.

grep을 사용하여 디렉터리(인수로 제공됨) 또는 해당 하위 디렉터리에서 확장자가 .txt인 파일의 내용만 표시합니다.

나는 find를 사용하여 이 작업을 수행했습니다.

find 'directory' -type f -name "*.txt" -print0 | xargs -0 cat 

    

grep을 사용하여 이 작업을 수행하는 방법을 모르겠습니다. 수천 번 시도했습니다.

답변1

최소한 GNU grep을 사용하십시오. (질문에 태그를 붙인 이후 구현한 것일 수도 있습니다.)리눅스), 이 --include 옵션을 사용하여 glob이 검색하는 파일을 제한할 수 있습니다. 이를 빈 패턴과 결합하여 시뮬레이션합니다 cat.

grep -hr --include='*.txt' '' directory

-h일치하는 결과에서 파일 이름의 기본 접두사를 끕니다.

답변2

파일의 내용을 표시하려면 grep빈 정규식 grep "" file.txt이나 '줄 시작' 정규식을 검색하면 됩니다 grep ^ file.txt.

내 이해는 디렉토리가 매개 변수로 제공된다는 것입니다. 이 같은 경우 :

grep ^ $(find $1 -name '*.txt')

또는

find $1 -name '*.txt' -exec grep ^ {} \;

두 솔루션의 문제점은 그들이 표시하는 것입니다모두" 대신 텍스트 파일file"이라는 질문이 필요합니다. 첫 번째 해결 방법은 두 개 이상의 텍스트 파일이 발견되면 텍스트 파일의 이름도 인쇄합니다. 마지막으로 너무 많은 텍스트 파일이 발견되면 첫 번째 해결 방법이 중단됩니다. xargs이 경우 도움이 됩니다.

관련 정보