![grep을 사용하여 디렉터리(인수로 제공됨) 또는 해당 하위 디렉터리에서 확장자가 .txt인 파일의 내용만 표시합니다.](https://linux55.com/image/13693/grep%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC(%EC%9D%B8%EC%88%98%EB%A1%9C%20%EC%A0%9C%EA%B3%B5%EB%90%A8)%20%EB%98%90%EB%8A%94%20%ED%95%B4%EB%8B%B9%20%ED%95%98%EC%9C%84%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%EC%84%9C%20%ED%99%95%EC%9E%A5%EC%9E%90%EA%B0%80%20.txt%EC%9D%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EB%82%B4%EC%9A%A9%EB%A7%8C%20%ED%91%9C%EC%8B%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
나는 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
이 경우 도움이 됩니다.