Ubuntuで最初にテキストに変換せずに、grepの機能を使用してPDFファイルを検索する方法はありますか?
コメント
- PDFからテキストへのコンバーターのようなものはありますか?および多数のPDFファイル内のフレーズを検索するためのコマンドラインツール。
- 検索を介してここに来る人の場合:最初にテキストファイルに変換する場合は、 複数の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"