pdfgrep: use pesquisa no estilo grep em arquivos PDF na linha de comando Linux

pdfgrep: use pesquisa no estilo grep em arquivos PDF na linha de comando Linux

O comando grep funciona apenas em arquivo de texto simples, não em arquivos PDF. pdfgrep é semelhante ao grep, mas para arquivos pdf.

Mesmo se você usar a linha de comando Linux moderadamente, você deve ter se deparado com o comando grep.

Grep é usado para procurar um padrão em um arquivo de texto. Ele pode fazer coisas poderosas loucas, como procurar novas linhas, procurar linhas onde não há caracteres maiúsculos, procurar linhas onde o caracteres inicial é um número, e muito, muito mais.

Mas grep funciona apenas em arquivos de texto simples. Não funcionará em arquivos PDF porque são arquivos binários.

É aqui que o pdfgrep entra em cena. Funciona como o grep para arquivos PDF. Vamos dar uma olhada nisso.

Conheça pdfgrep: busca grep com regex em arquivos PDF

pdfgrep tenta ser compatível com GNU Grep, onde faz sentido. Várias de suas opções favoritas do grep são suportadas (como -r, -i, -n ou -c). Você pode usar para procurar texto dentro do conteúdo de arquivos PDF.

Embora não venha pré-instalado como o grep, ele está disponível nos repositórios da maioria das distribuições Linux.

Você pode usar o gerenciador de pacotes da sua distribuição para instalar esta ferramenta incrível.

Para usuários de distribuições baseadas em Ubuntu e Debian, use o comando apt:

Comandos para usar no terminal

sudo apt install pdfgrep

Para Red Hat e Fedora, você pode usar o comando dnf:

Comandos para usar no terminal

sudo dnf install pdfgrep

A propósito, você usa o Arch? Você pode usar o comando pacman:

Comandos para usar no terminal

sudo pacman -S pdfgrep

Usando o comando pdfgrep

Agora que pdfgrep está instalado, veja como usá-lo em cenários mais comuns.

Se você tem alguma experiência com grep, então a maioria das opções vai ser familiar para você.

Para demonstrar, usaremos o livro PDF The Linux Command Line, escrito por William Shotts. É um dos poucos livros Linux que estão legalmente disponíveis gratuitamente.

A sintaxe para pdfgrep é a seguinte:

Comandos para usar no terminal

pdfgrep [PADRAO] [ARQUIVO.pdf]

Pesquisa normal

Vamos tentar fazer uma pesquisa básica pelo texto xdg no arquivo PDF.

Comandos para usar no terminal

pdfgrep xdg TLCL-19.01.pdf

pdfgrep_37-02

Isso resultou em apenas uma ocorrência.

Caso de busca insensível

Na maioria das vezes, o termo xdg é usado com caracteres alfabéticos em maiúsculas. Então, vamos tentar fazer uma busca insensível. Para uma pesquisa insensível de caso, usaremos a opção --ignore-case.

Você também pode usar a alternativa mais curta, que é -i.

Comandos para usar no terminal

pdfgrep --ignore-case xdg TLCL-19.01.pdf

pdfgrep_38-56

Como pode ver, tenho mais ocorrências depois de ligar o caso em busca insensível.

Obtenha uma contagem de todas as ocorrências

Às vezes, o usuário quer saber quantas correspondências foram encontradas da palavra. Vamos ver quantas vezes a palavra 'Linux' é mencionada (com correspondência insensível do caso).

A opção de usar neste cenário é --count (ou -c para abreviar).

Comandos para usar no terminal

pdfgrep --ignore-case linux TLCL-19.01.pdf --count

pdfgrep_39-12

Agora o Linux foi mencionado 1200 vezes neste livro... Isso foi inesperado.

Mostrar número da página

Arquivos de texto regulares são arquivos monolíticos gigantes. Não há páginas. Mas um arquivo PDF tem páginas. Então, você pode ver onde o padrão foi encontrado e em qual página. Use a opção --page-number para mostrar o número da página onde o padrão foi correspondido. Você também pode usar a opção -n como uma alternativa mais curta.

Vamos ver como funciona com um exemplo. Quero ver as páginas onde a palavra awk aparece. Adicionamos um espaço no final do padrão para evitar combinar com palavras como awkward, obter ocorrências não intencionais seriam estranhas. Em vez de escapar do espaço com uma barra, você também pode incluí-la em uma única cotação awk.

Comandos para usar no terminal

pdfgrep --page-number --ignore-case awk TLCL-19.01.pdf

pdfgrep_39-31

A palavra awk foi encontrada duas vezes na página número 333, uma na página 515 e mais uma vez na página 543 no arquivo PDF.

Mostrar contagem de ocorrências por página

Quer saber quantas ocorrências foram encontradas em qual página em vez de mostrar as ocorrências em si? Se você disse que sim, bem, é o seu dia de sorte!

Usar a opção --page-count faz exatamente isso. Como uma alternativa mais curta, você usa a opção -p. Quando você fornece esta opção para o pdfgrep, presume-se que você solicitou -n também.

Vamos dar uma olhada na aparência da saída. Por este exemplo, vamos ver onde o comando ln é usado no livro.

Comandos para usar no terminal

pdfgrep --page-count ln TLCL-19.01.pdf

pdfgrep_39-50

A saída é na forma de 'número de página: corresponde'. Isso significa que, na página número 4, o comando (ou melhor, "padrão") foi encontrado apenas uma vez. Mas na página número 57, pdfgrep encontrou 4 ocorrências.

Obtendo algum contexto

Quando o número de ocorrências encontradas é bastante grande, é bom ter algum contexto. Para isso, pdfgrep fornece algumas opções.

  • --after-context NUM: Imprime NUM das linhas que vêm após as linhas correspondentes (ou usar -A)
  • --before-context NUM: Imprime NUM de linhas que estejam antes das linhas correspondentes (ou use -B)
  • --context NUM: Imprime NUM de linhas que antes e vêm após as linhas correspondentes (ou usar -C)

Vamos encontrar XDG no arquivo PDF, mas desta vez, com um pouco mais de contexto.

Contexto após ocorrências

Usando a opção --after-context junto com um número, podemos ver quais linhas vêm após a correspondência. Abaixo está um exemplo de como ele se parece.

Comandos para usar no terminal

pdfgrep --after-context 2 XDG TLCL-19.01.pdf

pdfgrep_40-06

Contexto antes das partidas

A mesma coisa pode ser feita para cenários quando você precisa saber quais linhas estão presentes antes da linha que corresponde. Nesse caso, use a opção --before-context, juntamente com um número. Abaixo está um exemplo demonstrando o uso desta opção.

Comandos para usar no terminal

pdfgrep --before-context 2 XDG TLCL-19.01.pdf

pdfgrep_40-21

Contexto em torno de ocorrências

Se você quiser ver quais linhas estão presentes antes e vir depois da linha que correspondeu, use a opção --context e também forneça um número. Abaixo está um exemplo.

Comandos para usar no terminal

pdfgrep --context 2 XDG TLCL-19.01.pdf

pdfgrep_40-40

Caching

Um arquivo PDF consiste em imagens, bem como texto. Quando você tem um arquivo PDF grande, pode levar algum tempo para pular outras mídias, extrair texto e, em seguida, fazer a pesquisa real. Fazê-lo com frequência e esperar cada vez pode ficar frustrante.

Por essa razão, existe a opção --cache. Ele armazena o texto renderizado para acelerar o processo. Isso é especialmente perceptível em arquivos grandes.

Comandos para usar no terminal

pdfgrep --cache --ignore-case grep TLCL-19.01.pdf

pdfgrep_41-57

Para mostrar a diferença de velocidade, usamos o comando time. Olhe atentamente no momento indicado pelo valor real.

Como você pode ver, os comandos que incluem opção de cache foram concluídos mais rápido do que os que não o incluíram.

Além disso, suprimimos a saída usando a opção --quiet para conclusão mais rápida.

Arquivos PDF protegidos por senha

Sim, pdfgrep suporta até mesmo arquivos protegidos por senha. Tudo o que você precisa fazer é usar a opção --password, seguida pela senha.

Você pode usar esta opção da seguinte maneira:

Comandos para usar no terminal

pdfgrep --password [SENHA] [PADRAO] [ARQUIVO.pdf]

Conclusão

pdfgrep é uma ferramenta muito útil se você está lidando com arquivos PDF e quer a funcionalidade de grep, mas para arquivos PDF.

Última atualização deste artigo: 14 de october de 2022