답변:
이 작은 트릭을 사용 grep
하여 여러 파일을 처리하고 있다고 생각하여 파일 이름을 표시하십시오.
grep 'pattern' file /dev/null
줄 번호를 얻으려면 :
grep -n 'pattern' file /dev/null
/dev/null
이 명령 을 추가 할 때의 의미가 무엇인지 말씀해 주 시겠습니까?
grep
여러 파일 이름이 제공되는 경우 일치하기 전에 파일 이름이 자동으로 표시되지만 단일 입력 파일 인 경우 파일 이름이 그대로 유지됩니다. 사용하여 /dev/null
별도의 입력 파일로 grep
"생각"그것은 여러 파일을 처리하지만, 물론 비어의 그것이 일치 목록에 표시되지 않도록을 / dev / null이며, ..
-H
grep 옵션은 POSIX의 일부가 아니며 사용되는 OS는 Solaris 10이며 표준 grep이나 POSIX 호환 버전 grep에는 -H
옵션이 없습니다.
find . -name foo -exec grep pattern {} \;
이름이 지정된 파일을 많이 가정 할 때 여전히 grep을 find와 함께 사용하는 경우 중요합니다 . 이 트릭은 내가 시도한 모든 Linux / OSX 버전에서 작동하는 것 같습니다. 참고 나는 그것이 더 깨끗 하다고 생각 하지만 아래 언급 한 것처럼 귀하의 버전에서는 지원되지 않을 수 있습니다 . foo
find
grep
/dev/null
-H
grep
옵션이 -H
있고 -n
이용할 수있는 경우 ( man grep
친구 인 경우) :
$ cat file
foo
bar
foobar
$ grep -H foo file
file:foo
file:foobar
$ grep -Hn foo file
file:1:foo
file:3:foobar
옵션 :
-H, --with 파일 이름
각 일치에 대한 파일 이름을 인쇄하십시오. 검색 할 파일이 둘 이상인 경우 이것이 기본값입니다.
-n, --line-number
각 출력 행 앞에 입력 파일 내의 1 기반 행 번호를 접 두부로 사용하십시오. (-n은 POSIX에 의해 지정됩니다.)
-H
GNU 확장이지만 -n
되어 POSIX에 의해 지정
-H
여기서 지원되지 않습니다.
트릭이 필요하지 않습니다.
grep --with-filename 'pattern' file
줄 번호로 :
grep -n --with-filename 'pattern' file
grep
것을 모른다. 그래서 나는 모른다.
brew install grep
한 다음 사용하는 것 ggrep
입니다. PATH를 수정할 필요가 없습니다.
이 게시물에 대해 부분적으로 감사를 얻은 결과는 어떻습니까?
패턴 (예 filename=logfile.DATE
:)이있는 여러 디렉토리 내에서 이름이 다르지만 패턴 (예 :)이있는 로그가있는 여러 파일을 찾으려고합니다 /logsapp1, /logsapp2
. 각 파일에는 grep하려는 패턴 (예 :) "init time"
이 있으며 "init time"
각 파일 을 갖고 싶지만 파일이 속한 파일을 알고 싶습니다 .
find ./logsapp* -name logfile* | xargs -I{} grep "init time" {} \dev\null | tee outputfilename.txt
그런 다음 outputfilename.txt
과 같은 것입니다
./logsapp1/logfile.22102015: init time: 10ms
./logsapp1/logfile.21102015: init time: 15ms
./logsapp2/logfile.21102015: init time: 17ms
./logsapp2/logfile.22102015: init time: 11ms
일반적으로
find ./path_pattern/to_files* -name filename_pattern* | xargs -I{} grep "grep_pattern" {} \dev\null | tee outfilename.txt
설명:
find
명령은 패턴을 기반으로 파일 이름을 검색합니다
파이프 xargs -I{}
는 find
출력을{}
이것은 입력이 될 것입니다 grep ""pattern" {}
그런 다음 grep
파일 이름 을 표시 하는 트릭\dev\null
마지막으로 다음과 같이 파일에 출력을 씁니다. tee outputfile.txt
이것은 grep
버전 9.0.5 빌드 1989 에서 나를 위해 일했습니다 .
find ./path_pattern/to_files -type f -name "files*.log" -exec grep -Hn pattern {} \;
grep --version