grep은 tar 아래의 여러 파일에서 문자열을 찾아 wc -l을 인쇄합니다.

grep은 tar 아래의 여러 파일에서 문자열을 찾아 wc -l을 인쇄합니다.

주어진 tar.gz 파일 아래의 여러 파일에서 주어진 문자열을 검색하고 특정 파일 이름과 함께 해당 문자열에 대해 wc -l을 제공할 수 있는 명령/스크립트를 찾고 있습니다.

다음을 시도했지만 결과가 나오지 않습니다.

tar -zxf /home/myname/April/maillogs.tar.gz
for f in /home/myname/April/*; do
  grep -l "sent" $f |wc -l
done

답변1

주석에서 이미 언급했듯이 zgrep단일 명령으로 이 작업을 수행할 수 있습니다.

zgrep -c "sent" /home/myname/April/*.tar.gz

grep매뉴얼 에서 :

-c, --count

일반 출력을 억제합니다. 대신 각 입력 파일에 대해 일치하는 줄 수를 인쇄합니다. -v, --invert-match 옵션(아래 참조)을 사용하여 일치하지 않는 줄 수를 셉니다. (-c는 POSIX에 의해 지정됩니다.)

답변2

우그레프옵션이 있습니다 -z -c:

ugrep -z -c "sent" /home/myname/April/*.tar.gz

이는 tar.gz 파일과 해당 {path/file} 부분을 나열하여 tar.gz "send" 일치 항목을 논리적으로 보고합니다.

foo.tar.gz{path/file1.txt}:123
foo.tar.gz{path/file2.txt}:456
...
bar.tar.gz{path/file1.txt}:789
bar.tar.gz{path/file2.txt}:0
...

관련 정보