(.gz) 압축 폴더에서 문자열과 그 안에 있는 파일을 검색합니다. [닫기]

(.gz) 압축 폴더에서 문자열과 그 안에 있는 파일을 검색합니다. [닫기]

파일이 포함된 문자열은 (.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때문에 일치하는 각 행에는 "(표준 입력)" 문자열이 접두어로 붙습니다. -Hgrep

이로 인해 명령은 다음 유형의 출력을 생성합니다 tar.

file1
file2
(standard input): <matched lines from file2>
file3
(standard input): <matched lines from file3>

이 출력을 파이핑하면 두 grep명령 모두 다음 줄의 "(표준 입력)" 문자열 뒤에 오는 파일 이름만 추출할 수 있습니다. grep여기서 사용한 두 개의 순차적 명령 대신 정규식을 사용하여 패턴을 일치시키면 이 처리를 개선할 수 있습니다 .

이 경우 결과 출력은 다음과 같습니다.

file2
file3

관련 정보