1

pdfシェルスクリプトを使用してファイル内に文字列があるかどうかを確認する方法があるかどうか知りたいですか? 私は次のようなものを探していました:

if [search(string,pdf_file)] > 0 then  
   echo "exist"
fi
4

3 に答える 3

3

このアプローチでは、.pdf ファイルがページごとに変換されるため、検索文字列の出現箇所を$queryより具体的に特定できます。

# search for query string in available pdf files pagewise
for i in *.pdf; do
    pagenr=$(pdfinfo "$i" | grep "Pages" | grep -o "[0-9][0-9]*")
    fileid="\n$i\n"
    for (( p=1; p<=pagenr; p++ )); do
        matches=$(pdftotext -q -f $p -l $p "$i" - | grep --color=always -in "$query")
        if [ -n "$matches" ]; then
            echo -e "${fileid}PAGE: $p"
            echo "$matches"
            fileid=""
        fi
    done
done

pdftotext -f $p -l $pは、番号で識別される 1 ページのみに変換する範囲を制限します$pgrep --color=always後続の で試合のハイライトを保護できますechofileid=""複数の一致に対して .pdf ドキュメントのファイル名が一度だけ印刷されるようにするだけです。

于 2013-01-22T03:16:37.760 に答える
2

pdfサイモンがうまく指摘しているように、を使用してプレーンテキストに変換し、pdftotext探しているものを検索するだけです。

変換後grep、 、bash 正規表現、または任意のバリエーションを使用できます。

while read line; do

    if [[ ${line} =~ [0-9]{4}(-[0-9]{2}){2} ]]; then
        echo ">>> Found date;";
    fi

done < <(pdftotext infile.pdf -)
于 2013-01-22T02:00:25.827 に答える
0

通常、PDF ドキュメント内の各文字は個別に設定されます。したがって、.pdf をテキストに変換する必要があります。これにより、テキストが単純なストリームに縮小されます。

私はこれを試してみます:

grep -q 'a \+string' <(pdf2text some.pdf - | tr '\n' ' ') && echo exists

tr結合改行。\+では、単語間に 1 つ以上のスペース文字を使用できます。最後に、一致に基づいてgrep -q終了ステータスのみを返します。0/1一致する行は出力されません。

于 2013-01-22T02:56:28.220 に答える