Ubuntuで最初にテキストに変換せずに、grepの機能を使用してPDFファイルを検索する方法はありますか?

コメント

回答

パッケージpdfgrepをインストールしてから、次のコマンドを使用します:

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

– ————

これを行う最も簡単な方法:

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

コメント

  • これはmacosx(Mavericks)でも機能します。 brewを使用してインストールします。シンプル。ありがとう。
  • 好奇心からpdfgrepのソースを確認し、popplerを使用してpdfから文字列を抽出しました。 @wag ‘が、おそらくドキュメント全体ではなく、ページごとにのみ回答するのとほぼ同じです。
  • pdfgrepも再帰フラグがあります。したがって、この答えはおそらくpdfgrep -R pattern /path/に減らすことができます。ただし、PDFでなくても、すべてのファイルを処理すると効果が低下する可能性があります。’また、å、ä、öなどの国際文字に問題があることに気付きました。 。
  • 実際、-nオプションは、出力にページ番号を含めることができるため、pdfgrepのプロです(さらなる処理に役立つ場合があります)。
  • この回答は、コマンドのどのビットが文字通りコピーされることを意図していて、どのビットがプレースホルダーであるかを説明していると、使いやすくなります。 ‘のpatternは何ですか? ‘の{}は何ですか? ‘は `+`で何をしているのですか?最初に読んだときはわかりません…だから、私が行くマンページに行くと思います。

回答

poppler-utilsがインストールされている場合(Ubuntuデスクトップのデフォルト)、その場で「変換」してgrepにパイプできます。 :

pdftotext my.pdf - | grep "pattern" 

これでは.txtファイルは作成されません。

コメント

  • したがって、grepする前にテキストを抽出します。つまり、答えは” no “です。
  • @akira OPは、おそらく”を意味し、ビューアでPDFを開いて、テキストにエクスポートすることはありません”
  • @akira ” grep only “はどこにありますか?
  • @akiraええと、私はすでに私が思うことを言いました彼はおそらく、’テキストを処理する前にテキストにエクスポートしたくないという意味でした。彼が any コマンドに問題があるのではないかと疑っています。何らかの方法でテキストに変換します。そこに’しない理由はありません
  • @sherrellbc pdftotextの2番目の引数は、書き込むファイル名です。 。ただし、慣例により、ツールでは通常、ファイルではなく-を指定することで、ファイルではなくstdoutに書き込むことができます。同様に、一部のツールは、そのような引数を完全に省略した場合、デフォルトでstdoutに書き込みます(ただし、あいまいさを作成せずにこれが常に可能であるとは限りません)。

回答

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 を確認してください)。 。圧縮を逆にする テキストを抽出することもできます。

pdf2textなどのツールを使用してファイルごとに実行し、結果をgrepするか、「インデクサー」を実行します( xapian.org または lucene )は、.pdfファイルから検索可能なインデックスを作成します。そのインデクサーの検索エンジンツールを使用してPDFのコンテンツを取得します。

ただし、PDFファイルをgrepして、テキストを抽出せずに信頼できる回答を期待することはできません。最初に。

コメント

  • 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"" \; 

ここでの同様の回答に対する利点は、

フラグ。標準のgrepにはより多くの機能があるため、これはpdfgrepよりもいくらか優れています。

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

コメント

  • これを残したほうがよかったと思います参照している同様の回答のコメント(または編集)として。

回答

ご覧くださいPDFファイル内の検索をサポートする共通リソースgrepツール crgrep で。

アーカイブにネストされたコンテンツ、データベースなどの他のリソースの検索も可能です。テーブル、画像メタデータ、POMファイルの依存関係、Webリソース、および再帰検索を含むこれらの組み合わせ。

回答

最初に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) 

コメント

  • 理由いったい、lsを使用してファイル名をパラメーターに入れていますか? ‘は遅いだけでなく、出力をlsとして使用するのは悪い考えです。他のコマンドへの入力pdfgrep 'pattern' *.pdfで十分です
  • @phuclvあなたは間違っています。 pdfgrep 'pattern' *.pdfは機能しません。
  • @ f0nzie you ‘は間違っています。 $(ls *.pdf)ほぼ 正確に *.pdfと同じになりますが、特別なために悪化しますファイルは引用符で保護されていません

回答

tpがディスク上で変換しないことを意味すると思います。それらをstdoutに変換してから、pdftotextでgrepできます。 PDFはほとんどがバイナリ形式であるため、変換せずにpdfをgrepすることは実用的なアプローチではありません。

ディレクトリ内:

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

またはディレクトリとそのサブディレクトリ内:

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

また、一部のpdfはスキャンであるため、最初にOCRedである必要があります。 grepで検索できないすべてのPDFを検索してOCRする非常に簡単な方法を作成しました。

pdfファイルには、通常は検索できないフォントがありません。したがって、これを知っていると、pdffontsを使用できます。

はテーブルヘッダーであるため、ファイルが検索可能である場合、3行以上の出力があり、これを知って作成できます。

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 

回答

Gnomeを使用している場合は、gpdfが必要になる場合があります! Gnomeを使用していない場合は、これを確認してください。CLIpdfビューアのリストがあります。次に、grepを使用してパターンを見つけることができます。

回答

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

コメント

  • サイトへようこそ、ありがとうございますあなたの貢献のためにあなた。これらのオプションの意味について説明を追加していただけますか?これは、pdfgrepを推奨するこの質問に対する他の回答とあなたのアプローチがどのように異なるかを説明するのにも役立ちます。

回答

最も簡単な方法は

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

コメント

  • サイトへようこそ。提案されたソリューションにさらに説明を追加して、専門家以外の人がアクセスしやすくしていただけませんか。たとえば、grepコマンドラインは、grepに精通していない人が気付いていないサブディレクトリを再帰的に検索します。また、-iフラグを含めましたが、大文字と小文字を区別しないと、ユーザーが常に望んでいるとは限りません。さらに、あなたのアプローチが例えばの答えとどのように異なるかを説明してください。 @phuclvなど。
  • AdminBeeが言うように、この質問では大文字と小文字を区別しない検索や再帰的なディレクトリ検索は求められません。 -nおよび-wオプションも、質問によって正当化されません。しかし、もっと重要なことに、この回答は、名前が.pdfで終わるテキストファイルを検索する方法を示しています。質問の要点を見逃しています。

回答

less mypdf.pdf | grep "Hello, World" 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です