쉘 스크립트를 사용하여 pdf
파일에 문자열이 있는지 확인하는 방법이 있는지 알고 싶습니다. 로 잘 시몬 지적쉘을 사용하여 pdf에서 문자열 찾기
if [search(string,pdf_file)] > 0 then
echo "exist"
fi
쉘 스크립트를 사용하여 pdf
파일에 문자열이 있는지 확인하는 방법이 있는지 알고 싶습니다. 로 잘 시몬 지적쉘을 사용하여 pdf에서 문자열 찾기
if [search(string,pdf_file)] > 0 then
echo "exist"
fi
, 당신은 단순히 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 -)
각 문자는 일반적으로 개별적으로 설정된다. 따라서 .pdf를 텍스트로 변환해야합니다. 그러면 텍스트가 간단한 스트림으로 축소됩니다.
나는 이것을 시도 할 것이다 :
grep -q 'a \+string' <(pdf2text some.pdf - | tr '\n' ' ') && echo exists
tr
줄 바꿈을 결합한다. \+
은 단어 사이에 하나 이상의 공백 문자를 허용합니다. 마지막으로 grep -q
은 일치를 기반으로 종료 상태 0/1
만 반환합니다. 일치하는 행은 인쇄되지 않습니다.
이 접근 방식은 .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 문서의 파일 이름이 여러 일치 항목에 대해 한 번만 인쇄되도록합니다.
이것은 [Grep PDF Files?] (http://unix.stackexchange.com/questions/6704/grep-pdf-files)와 매우 밀접한 관계가있는 것으로 보입니다. – Simon