파일이 포함된 문자열은 (.gz) 압축 폴더에서 검색해야 합니다.
샘플 폴더 -
PROD_009_010919_0110.tar.gz
내부 파일 - PROD_009_010919.log01, PROD_009_010919.log02, PROD_009_010919.log03
... 등.
명령 - zgrep -ia *123456* PROD_*
예상한 결과가 나오지 않습니다.
예상 출력 - 압축된 폴더의 모든 파일에서 "123456" 문자열을 검색하고 파일이 포함된 문자열을 표시해야 합니다.
답변1
이것은 주어진 패턴과 일치하는 tarball의 파일 목록을 인쇄합니다:
tar --ignore-command-error -xvf PROD_009_010919_0110.tar.gz --to-command="grep -FH 1234536 -" | grep -B1 --no-group-separator '(standard input)' | grep -v '(standard input)'
이 --to-command
옵션은 각 파일을 추출하여 명령의 표준 입력으로 보냅니다 grep
. 이 -v
옵션은 각 파일의 처리를 나열합니다.
일치하는 항목이 없을 때 종료 상태를 무시하는 데 사용됩니다 --ignore-command-error
. 명령이 (인쇄 파일 이름) 옵션을 사용하기 grep
때문에 일치하는 각 행에는 "(표준 입력)" 문자열이 접두어로 붙습니다. -H
grep
이로 인해 명령은 다음 유형의 출력을 생성합니다 tar
.
file1
file2
(standard input): <matched lines from file2>
file3
(standard input): <matched lines from file3>
이 출력을 파이핑하면 두 grep
명령 모두 다음 줄의 "(표준 입력)" 문자열 뒤에 오는 파일 이름만 추출할 수 있습니다. grep
여기서 사용한 두 개의 순차적 명령 대신 정규식을 사용하여 패턴을 일치시키면 이 처리를 개선할 수 있습니다 .
이 경우 결과 출력은 다음과 같습니다.
file2
file3