grep
출력에서 일치하는 줄 앞에 파일 이름을 표시하려면 어떻게 해야합니까?
답변
이 작은 트릭을 사용 grep
하여 여러 파일을 처리하고 있다고 생각하여 파일 이름을 표시하십시오.
grep 'pattern' file /dev/null
줄 번호를 얻으려면 :
grep -n 'pattern' file /dev/null
답변
옵션이 -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에 의해 지정
답변
트릭이 필요하지 않습니다.
grep --with-filename 'pattern' file
줄 번호로 :
grep -n --with-filename 'pattern' file
답변
이 게시물에 대해 부분적으로 감사를 얻은 결과는 어떻습니까?
패턴 (예 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 에서 나를 위해 일했습니다 .
답변
이것은 이전 솔루션에서 약간 수정되었습니다. 내 예제는 bash 스크립트에서 stderr 리디렉션을 찾습니다.
grep '2>' $(find . -name "*.bash")
답변
grep 'search this' *.txt
나를 위해 모든 .txt 파일을 검색했습니다 (물론 검색 값을 입력하십시오).
답변
