it-swarm-ko.tech

PDF 파일을 어떻게 grep 할 수 있습니까?

우분투에서 먼저 텍스트로 변환하지 않고 grep의 힘을 사용하여 PDF 파일을 검색하는 방법이 있습니까?

160
Dervin Thunk

pdfgrep 패키지를 설치 한 후 다음 명령을 사용하십시오.

find /path -iname '*.pdf' -exec pdfgrep pattern {} +

——————

가장 간단한 방법은 다음과 같습니다.

pdfgrep 'pattern' *.pdf
pdfgrep 'pattern' file.pdf 
164
enzotib

당신이 가지고 있다면 poppler-utils 설치 (Ubuntu Desktop의 기본값), 즉석에서 "변환"하여 grep로 파이프 할 수 있습니다.

pdftotext my.pdf - | grep 'pattern'

.txt 파일은 생성되지 않습니다.

63
wag

pdfgrep 이 목적을 위해 작성되었으며 우분투에서 사용할 수 있습니다.

그것은 대부분 grep와 호환되도록 노력하므로 PDF에만 특화된 "grep의 힘"을 제공합니다. 여기에는 --recursive, --ignore-case 또는 --color와 같은 일반적인 grep 옵션이 포함됩니다.

pdftotext | grep와 달리 pdfgrep은 일치하는 방식으로 페이지 번호를 출력 할 수 있으며 전체 문서를 검색 할 필요가 없을 때 (예 : --max-count 또는 --quiet).

기본 사용법은 다음과 같습니다.

pdfgrep PATTERN FILE..

여기서 PATTERN은 검색 문자열이고 FILE는 파일 이름 목록 (또는 셸의 와일드 카드)입니다.

자세한 내용은 manpage 를 참조하십시오.

16
hpdeifel

아니.

Pdf는 데이터 덩어리, 일부는 텍스트, 일부는 그림 및 일부는 정말 멋진 XYZ (예 : .u3d 파일)로 구성됩니다. 이러한 청크는 대부분 압축 된 시간입니다 (예 : flat, check http://www.verypdf.com/pdfinfoeditor/compression.htm ). .pdf를 'grep'하려면 have 압축을 일으켜 텍스트를 추출하십시오.

pdf2text와 같은 도구를 사용하여 파일별로 수행하고 결과를 grep하거나 'indexer'를 실행하십시오 ( xapian.org 또는 lucene =) .pdf 파일에서 검색 가능한 색인을 작성한 다음 해당 색인 작성기의 검색 엔진 도구를 사용하여 pdf의 컨텐츠를 가져올 수 있습니다.

그러나 아닙니다. pdf 파일을 grep 할 수 없으며 텍스트를 먼저 추출하지 않고도 신뢰할 수있는 답변을 얻을 수 있습니다.

7
akira

Recoll PDF를 검색 할 수 있습니다. 정규식은 지원하지 않지만 다른 검색 옵션이 많이 있으므로 필요에 맞을 수 있습니다.

6
user39336

먼저 strings을 (를) 통해 파이프 할 수 있습니다.

cat file.pdf | strings | grep <...etc...>
4
Andy Smith

PDF 파일 내에서 검색을 지원하는 공통 자원 그렙 도구 crgrep 를 살펴보십시오.

또한 아카이브, 데이터베이스 테이블, 이미지 메타 데이터, POM 파일 종속성 및 웹 리소스에 중첩 된 콘텐츠와 같은 다른 리소스와 재귀 검색을 포함한 이들의 조합을 검색 할 수 있습니다.

3
Craig

StackOverflow에 중복 질문이 있습니다. 사람들은 harish.venkarts의 변형을 제안합니다.

find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;

여기에 비슷한 답변보다 장점은 --with-filename grep 플래그입니다. 표준 grep에 더 많은 기능이 있기 때문에 pdfgrep보다 다소 우수합니다.

https://stackoverflow.com/questions/4643438/how-to-search-contents-of-multiple-pdf-files

2
user7610

이 시도

find /path -iname *.pdf -print0 | for i in `xargs 0`; do echo $i; \
    pdftotext "$i" - | grep pattern; done

pdf 내부에서 패턴이 발생하는 선을 인쇄하기 위해

2
harish.venkat

pdf 파일이 들어있는 폴더로 CD를 넣습니다.

pdfgrep 'pattern' your.pdf

또는 하나 이상의 pdf 파일을 검색하려는 경우 (예 : 폴더의 모든 pdf 파일에서)

pdfgrep 'pattern'  `ls *.pdf`

또는

pdfgrep 'pattern' $(ls *.pdf)
2
Rasmuss Rall

현재 디렉토리에서 pdf를 검색하는 빠른 스크립트는 다음과 같습니다.

#!/bin/bash

if [ $# -ne 1 ]; then
  echo "usage $0 VALUE" 1>&2
  exit 1
fi

echo 'SEARCH IS CASE SENSITIVE' 1>&2

find . -name '*.pdf' -exec /bin/bash -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$0"' $1 \;
0
Nico

gnome을 사용하는 경우 gpdf가 필요할 수 있습니다! Gnome을 사용하지 않는 경우 this 를 확인하십시오. CLI pdf 뷰어 목록이 있습니다. 그런 다음 grep를 사용하여 패턴을 찾을 수 있습니다.

0
Dharmit

디스크에서 변환하지 않는 것을 의미한다고 가정합니다. stdout로 변환 한 다음 pdftotext로 grep 할 수 있습니다. PDF은 대부분 이진 형식이므로 어떤 종류의 변환없이 pdf를 가져 오는 것은 실용적인 방법이 아닙니다.

디렉토리에서 :

ls -1 ./*.pdf | xargs -L1 -I {} pdftotext {}  - | grep "keyword"

또는 디렉토리 및 해당 서브 디렉토리에서 :

tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} pdftotext {}  - | grep "keyword"

또한 일부 pdf은 (는) 스캔이므로 먼저 OCR을 수행해야합니다. greped 및 OCR이 될 수없는 모든 PDF를 검색하는 매우 간단한 방법을 작성했습니다.

pdf 파일에 글꼴이없는 경우 일반적으로 검색 할 수 없습니다. 이것을 알면 pdffonts를 사용할 수 있습니다.

pdffonts의 처음 두 줄은 테이블 헤더이므로 파일을 검색 할 수있을 때 두 줄 이상의 출력이 있으면 다음과 같이 만들 수 있습니다.

gedit check_pdf_searchable.sh

그런 다음 붙여 넣기

#!/bin/bash 
#set -vx
if ((`pdffonts "$1" | wc -l` < 3 )); then
echo $1
pypdfocr "$1"
fi

그런 다음 실행 가능하게하십시오.

chmod +x check_pdf_searchable.sh

그런 다음 디렉토리에 검색 할 수없는 모든 PDF를 나열하십시오.

ls -1 ./*.pdf | xargs -L1 -I {} ./check_pdf_searchable.sh {}

또는 디렉토리 및 해당 서브 디렉토리에서 :

tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} ./check_pdf_searchable.sh {}
0

Pdf 이름/속성 또는 압축되지 않거나 인코딩되지 않은 간단한 문자열 만 검색하려면 strings 대신 다음을 사용할 수 있습니다.

grep -a STRING file.pdf
cat -v file.pdf | grep STRING

grep --help에서 :

      --binary-files=TYPE   assume that binary files are TYPE;
                            TYPE is 'binary', 'text', or 'without-match'
  -a, --text                equivalent to --binary-files=text

그리고 cat --help :

  -v, --show-nonprinting   use ^ and M- notation, except for LFD and TAB
0
phuclv