여러 아카이브에서 정규식을 사용하여 해당 아카이브에 포함된 파일 이름과 해당 파일의 내용을 찾는 것이 가능합니까? 어떤 아카이브에 패턴이 일치하는지 알고 싶습니다. 가능한 경우 OS X를 사용하고 있습니다.
답변1
보다 표현력이 풍부한 스타일 파일 모드를 사용해야 하는 경우 grep
:
tar -OT <(tar -tf /path/to/file.tar | grep 'FILE_PATTERN') -xf /path/to/file.tar \
| grep 'CONTENT_PATTERN'
-O
와 함께 사용하는 경우 출력을 다음으로 지정 stdout
하고 추출할 이름이 포함된 파일을 지정합니다.-T
-x
더 간단했다면경로명 확장<( ... )
( )를 더 간단한 줄 바꾸기 프로세스로 바꿀 수 있으면 충분합니다. 그러면 echo
파일에서 두 번 읽기를 실행하지 않아도 됩니다.tar
tar -OT <(echo 'FILE_PATTERN') -xf /path/to/file.tar \
| grep 'CONTENT_PATTERN'
파일 이름도 보려면 해당 -v
플래그를 추가하세요(저는 개인적으로 선택하겠습니다 ). 그러나 파일 이름을 얻으려면 grep을 다시 수정 -xvf
해야 합니다 . 나는 이것을 독자들에게 연습으로 남겨 두겠습니다 ...CONTENT_PATTERN
조금 더 까다로워지고 더 많은 출력 처리를 사용해야 할 수도 있습니다 awk
... 일치하는 파일 이름이 한 줄에 표시되므로 불행히도 여기에는 명확한 구분 기호가 없습니다.파일 이름이 내용으로 반복되지 않는다고 가정합니다.:
tar ... | awk '/^FILLE_AWK_PATTERN$/{f=$0;next}...'
그러면 awk
변수가 f
발견된 각각의 새 파일 이름으로 설정됩니다.그리고 다음줄로 점프. 그 다음에,
tar ... | awk '...$f&&/CONTENT_AWK_PATTERN/{print $f;$f=""}'
일치하는 줄이 보이면 인쇄합니다.$f
파일 이름을 재설정하세요.다음 파일이 "만날" 때까지.
종합해보면:
tar -OT <(echo 'FILE_PATTERN') -xf /path/to/file.tar \
| awk '/^FILLE_AWK_PATTERN$/{f=$0;next};$f&&/CONTENT_AWK_PATTERN/{print $f;$f=""}'