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

댓글 h3>

답변

pdfgrep 패키지를 설치 한 다음 다음 명령을 사용합니다.

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

—— ————

가장 간단한 방법 :

pdfgrep "pattern" *.pdf pdfgrep "pattern" file.pdf 

댓글

  • 이것은 mac osx (Mavericks)에서도 작동합니다. brew를 사용하여 설치하십시오. 단순한. 감사합니다.
  • 호기심에 pdfgrep의 소스를 확인했고 poppler를 사용하여 pdf에서 문자열을 추출했습니다. 거의 정확하게 @wag ‘의 대답은 전체 문서가 아닌 페이지 단위로만 대답합니다.
  • pdfgrep 또한 재귀 플래그가 있습니다. 따라서이 대답은 pdfgrep -R pattern /path/로 축소 될 수 있습니다. PDF가 아니더라도 ‘ 모든 파일을 통과하면 효과가 떨어질 수 있습니다. 그리고 å, ä 및 ö와 같은 국제 문자에 문제가 있음을 알았습니다. .
  • 사실 -n 옵션은 출력에 페이지 번호를 포함 할 수 있으므로 pdfgrep의 전문가입니다 (추가 처리에 도움이 될 수 있음).
  • 이 답변은 명령의 어떤 비트가 문자 그대로 복사되어야하고 어떤 부분이 자리 표시 자인지 설명하면 사용하기 더 쉽습니다. ‘의 pattern는 무엇입니까? ‘의 {}는 무엇인가요? `+`는 ‘ 무엇입니까? 처음 읽었을 때는 전혀 모르겠습니다. 맨 페이지로 이동합니다.

답변

poppler-utils가 설치되어있는 경우 (Ubuntu Desktop의 기본값) 즉시 “변환”하여 grep로 파이프 할 수 있습니다. :

pdftotext my.pdf - | grep "pattern" 

.txt 파일을 만들지 않습니다.

댓글

  • 그래서 .. grep하기 전에 텍스트를 추출합니다. 즉, 대답은 ” no “입니다.
  • @akira OP는 뷰어에서 PDF를 열고 텍스트로 내 보내지 않고 “을 의미했을 것입니다. ”
  • @akira ” grep 만 ” 어디에서 볼 수 있나요?
  • @akira 글쎄, 나는 이미 내 생각을 말했어 그가 의미 한 것 같습니다. ‘ 텍스트를 처리하기 전에 텍스트로 내보내고 싶지 않습니다. 나는 그가 모든 명령에 문제가 있는지 의심합니다. 어떤 식 으로든 텍스트로 전환합니다. ‘하지 않을 이유가 없습니다.
  • @sherrellbc pdftotext의 두 번째 인수는 쓸 파일 이름입니다. . 그러나 일반적으로 도구를 사용하면 파일 대신 -를 지정하여 파일 대신 stdout에 쓸 수 있습니다. 마찬가지로, 일부 도구는 이러한 인수를 완전히 생략하면 기본적으로 stdout에 기록합니다 (하지만 모호성을 만들지 않고 항상 가능한 것은 아닙니다).

Answer

pdfgrep 는 정확히 이러한 목적으로 작성되었으며 Ubuntu에서 사용할 수 있습니다.

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

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

기본 사용법 :

pdfgrep PATTERN FILE.. 

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

자세한 내용은 맨 페이지 를 참조하세요.

답변

아니요.

pdf는 데이터 덩어리로 구성되며 일부는 텍스트, 일부는 그림, 일부는 정말 마법처럼 멋진 XYZ (예 : .u3d 파일)입니다. 청크는 대부분 압축됩니다 (예 : 플랫, http://www.verypdf.com/pdfinfoeditor/compression.htm 확인). “grep”하려면 . pdf 당신이 가지고 압축을 역순으로 일명 텍스트를 추출합니다.

pdf2text와 같은 도구를 사용하여 파일별로이를 수행하고 결과를 grep하거나 “인덱서”를 실행합니다 ( xapian.org 또는 lucene )은 .pdf 파일에서 검색 가능한 색인을 생성하고 다음을 사용할 수 있습니다. 해당 인덱서의 검색 엔진 도구를 사용하여 pdf의 내용을 가져옵니다.

하지만 아니요, grep pdf 파일은 텍스트를 추출하지 않고는 신뢰할 수있는 답변을 기대할 수 없습니다. 먼저.

댓글

  • pdfgrep가 존재한다고 생각하면 (위 참조) 플랫 ” no “가 올바르지 않습니다.
  • @JonathanCross, “라는 질문을 고려하면 grep의 기능을 사용하여 먼저 텍스트로 변환하지 않고 “, 플랫 ” no ” 정답 입니다.

답변

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

답변

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

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

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

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

댓글

  • 이것을 남겨두면 더 좋았을 것 같습니다 귀하가 언급하고있는 유사한 답변의 주석 (또는 편집)으로.

답변

둘러보기 PDF 파일 내 검색을 지원하는 공통 리소스 grep 도구 crgrep 에서.

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

답변

먼저 strings를 통과합니다 .-

cat file.pdf | strings | grep <...etc...> 

댓글

  • strings file.pdf | grep <...> 만 사용하면 ‘ cat
  • 가 필요하지 않습니다.

  • 예-내 마음은 스트림에서 더 잘 작동하는 것 같습니다 … 🙂
  • 텍스트가 압축되면 작동하지 않습니다. 대부분의 경우입니다.
  • 텍스트는 압축되지 않고 ‘ 일반적으로 형식 정보와 잘 섞여있는 작은 문장 (단어 전체가 아닐 수도 있습니다!)입니다. strings 또는 grep에는별로 친숙하지 않습니다.
  • 이 작업에 문자열을 사용하는 또 다른 이유를 생각할 수 있습니까? ‘ 작동하지 않습니까? 문자열을 사용하면 일부 PDF에서는 작동하지만 다른 PDF에서는 작동하지 않는 것으로 나타났습니다.

답변

사용해보세요

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

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

답변

다음은 현재 디렉토리의 검색 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" \; 

댓글

  • 너무 작아서 편집 할 수 없습니다. 찾기 호출의 $1를 인용해야합니다. 그렇지 않으면 검색에서 ‘ 작동하지 않습니다. 공백이있는 용어.
  • @ankon이 수정했습니다. 🙂

답변

cd to pdf 파일이 포함 된 폴더를 선택한 다음 ..

pdfgrep "pattern" your.pdf 

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

pdfgrep "pattern" `ls *.pdf` 

또는

pdfgrep "pattern" $(ls *.pdf) 

댓글

답변

디스크에서 변환하지 않는다는 뜻이라고 가정합니다. 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 처리해야합니다. grep 처리 할 수없는 모든 pdf를 검색하고 OCR하는 매우 간단한 방법을 작성했습니다.

pdf 파일에는 일반적으로 검색 할 수없는 글꼴이 없습니다. 따라서이를 알면 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 {} 

답변

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 

답변

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

답변

 pdfgrep -r --include "*.pdf" -i "pattern"  

댓글

  • 사이트에 오신 것을 환영합니다. 당신의 기여에. 이 옵션의 의미에 대한 설명을 추가해 주시겠습니까? 이는 또한 pdfgrep를 권장하는이 질문에 대한 다른 답변과 귀하의 접근 방식이 어떻게 다른지 설명하는 데 도움이 될 수 있습니다.

답변

가장 빠른 방법은

grep -rinw "pattern" --include \*.pdf * 

댓글

  • 사이트에 오신 것을 환영합니다. 비전문가가 더 쉽게 접근 할 수 있도록 제안 된 솔루션에 더 많은 설명을 추가 하시겠습니까? 예를 들어, grep 명령 줄은 grep에 익숙하지 않은 사람이 알지 못할 수있는 하위 디렉터리에서 반복적으로 검색합니다. 또한 대소 문자를 무시하는 것이 항상 사용자가 원하는 것은 아니지만 -i 플래그를 포함했습니다. 또한 귀하의 접근 방식이 예를 들어 asnwer와 다른 점을 설명하십시오. @phuclv 및 기타.
  • AdminBee가 말했듯이이 질문은 대소 문자를 구분하지 않는 검색이나 재귀 디렉토리 검색을 요구하지 않습니다. -n-w 옵션도 질문으로 정당화되지 않습니다. 그러나 더 중요한 것은이 답변이 이름이 .pdf로 끝나는 텍스트 파일을 검색하는 방법을 알려준다는 것입니다. 질문의 요점을 놓쳤습니다.

답변

less mypdf.pdf | grep "Hello, World" 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다