2013-01-22 3 views
1

쉘 스크립트를 사용하여 pdf 파일에 문자열이 있는지 확인하는 방법이 있는지 알고 싶습니다. 로 잘 시몬 지적쉘을 사용하여 pdf에서 문자열 찾기

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

이것은 [Grep PDF Files?] (http://unix.stackexchange.com/questions/6704/grep-pdf-files)와 매우 밀접한 관계가있는 것으로 보입니다. – Simon

답변

2

, 당신은 단순히 pdftotext를 사용하여 일반 텍스트로 pdf을 변환 할 수 있습니다 다음, 당신이 무엇을 찾고 있는지를 검색 : 내가 좋아하는 뭔가를 찾고 있었다.

변환 한 후에는 grep, bash는 정규 표현식을 사용할 수있다, 또는 변화는 당신이 원하는 :하여 PDF 문서 내에서

while read line; do 

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

done < <(pdftotext infile.pdf -) 
0

각 문자는 일반적으로 개별적으로 설정된다. 따라서 .pdf를 텍스트로 변환해야합니다. 그러면 텍스트가 간단한 스트림으로 축소됩니다.

나는 이것을 시도 할 것이다 :

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

tr 줄 바꿈을 결합한다. \+은 단어 사이에 하나 이상의 공백 문자를 허용합니다. 마지막으로 grep -q은 일치를 기반으로 종료 상태 0/1 만 반환합니다. 일치하는 행은 인쇄되지 않습니다.

2

이 접근 방식은 .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

의 범위가 $p 번호에 의해 식별 한 페이지로 변환하도록 제한한다. grep --color=always은 후속 echo에서 일치 하이라이트를 보호합니다. fileid=""은 .pdf 문서의 파일 이름이 여러 일치 항목에 대해 한 번만 인쇄되도록합니다.

관련 문제