Como fazer buscas via grep dentro de arquivos texto .doc

Arquivos .doc, do Microsoft Office são arquivos binários, com muito pouco conteúdo em texto e, portanto, imunes à leitura pelo comando grep.
Mas você pode contornar facilmente o problema com o uso de uma ferramenta adicional, o catdoc.

Geralmente, o utilitário não costuma vir instalado, por padrão.
Mas ele está disponível nos repositórios oficiais da maioria das distribuições GNU/Linux. É só ir lá e pegar…

No Debian ou no Ubuntu, faça a instalação via apt:


sudo apt install catdoc

O catdoc tem limitações.
A partir do programa, é possível realizar um cat “normal” em cima de qualquer arquivo .doc comum.
Já o conteúdo de arquivos criptografados ou do tipo .docx infelizmente não pode ser visto ou pesquisado pelo aplicativo.
catdoc grep

O utilitário, combinado com o comando grep, dará o resultado desejado.
Segue um exemplo:


catdoc Documentos/Guia\ do\ ubuntu.doc | grep -i ubuntu

Leia mais sobre o comando grep.

Como pesquisar em arquivos .ODT, com o comando grep

Infelizmente, o comando grep não consegue enxergar o conteúdo de arquivos .odt, bem como muitos outros arquivos que não sejam puro texto.
Arquivos binários, como é o caso, não são transparentes para o uso do grep.

Neste texto, vou mostrar como fazer a conversão do seu arquivo .odt e, durante o processo, o grep captura o conteúdo e faz a busca pelas strings que você sugere, na linha de comando.
Para isto, o utilitário odt2txt faz a conversão do .odt e repassa o resultado ao comando grep.
A sintaxe é assim:

odt2txt --stdout nome-do-arquivo.odt | grep -i string-a-ser-pesquisada

Veja um exemplo:


odt2txt --stdout Documentos/Linux\ Cloud.odt | grep -i linux

A Evolução do GNU/Linux
Distribuições GNU/Linux
Certificação Linux
Mercado Linux
Conhecendo a Arquitetura do Sistema Linux
Linux Inside: Instalação Desktop Debian e CentOS

Com a opção ‘–stdout’, o utilitário odt2txt desvia o resultado para a saída padrão do sistema.
Em seguida, o grep é chamado para interceptar o resultado, no modo texto e exibir as linhas que contém a cadeia de caracteres solicitada.

Leia mais sobre o comando grep.

Conheça estes 7 motivos para abandonar o comando grep e passar a usar o ack.

Tecnicamente, o ack foi projetado como ferramenta de busca dentro de arquivos texto — tendo como público-alvo os programadores.
Entre estes, o utilitário é mais eficiente do que o comando grep.
Neste texto, vou mostrar algumas vantagens de uso do ack e como instalar a ferramenta no Linux (caso ela já não esteja instalada aí).
Entre as vantagens de usar o ack — para fazer pesquisa dentro do código fonte — a documentação oficial cita:

  1. É rápido — por que se restringe a strings que “façam sentido” retornar. As expressões regulares em Perl tem alto índice de otimização.
  2. É portável — por ser escrito em Perl e não ter outras dependências além do Perl 5, pode rodar no Windows, MAC, UNIX e nos vários sabores do BSD e do Linux.
  3. Ignora automaticamente diretórios irrelevantes para a sua busca — a recursividade é seu comportamento padrão, mas ele ignora arquivos .git, .svn e diretórios CVS e VCS. Lógico que você pode mudar isto manualmente.
    Como exemplo da praticidade, a documentação compara os dois comandos de busca, a seguir, que tem resultados semelhantes:

    grep pattern $(find . -type f | grep -v '\.git')
    

    ou

    ack pattern
    

    Qual você prefere?

  4. Melhores resultados — como ele prioriza arquivos de código fonte, você obtém menos resultados irrelevantes. Ele pula até arquivos de backup.
  5. Separa fácil os arquivos — para quem tem um projeto envolvendo mais de uma linguagem de programação (muito comum entre web developers).
    É fácil adicionar –python, para restringir as buscas dentro de arquivos da linguagem Python, ou –nohtml evitar arquivos HTML.

    O ack tem detecção de tipos de arquivos, muito além da leitura da extensão do nome.

    Veja outra comparação entre comandos grep e ack, para realizar buscas dentro de arquivos Perl:

    grep pattern $(find . -name '*.pl' -or -name '*.pm' -or -name '*.pod' | grep -v .git)
    
    ack --perl pattern 
    

    Novamente, qual dos dois comandos, acima, você prefere usar?
    Note que o sucesso do grep, no primeiro exemplo, depende do uso do comando find (leia mais sobre ele aqui). O ack é visivelmente mais eficiente, neste caso.

  6. Listas de arquivos — podem ser criadas, antes mesmo de qualquer busca.
    Esta utilidade vai agradar até quem não é programador. Com o comando, abaixo, o ack relaciona todos os arquivos da linguagem PHP, em um diretório, recursivamente:

    ack -f --php
    

    Você gastaria um pouco mais de seus dedos para realizar esta tarefa com o find…

  7. O ack tem highlighting, que permite realçar palavras-chave nos resultados das buscas.

linux terminal ack command
Por fim, A palavra “ack” é menor do que “grep”, o que te poupa alguns preciosos milésimos de segundos na digitação a cada vez que precisar realizar uma busca.

Como instalar o ack no sistema

O ack está disponível nos repositórios das principais distribuições (se não todas) Linux e UNIX (BSD).
Infelizmente, no momento em que escrevo este texto, ele ainda não faz parte do conjunto de programas utilitários padrão, que já “estão lá”, logo após a instalação.
Contudo, ele é super fácil de instalar.
Quem usa o Debian, pode usar o apt, para fazer o trabalho:

sudo apt update
sudo apt install ack

No Ubuntu 16.04 LTS, o nome do pacote (transitório) é ack-grep. Nas futuras atualizações ele deve ser renomeado para apenas “ack”.
O pessoal do Fedora, pode instalar com o dnf:

sudo dnf install ack

No FreeBSD, use os ports e instale o pacote p5-ack.
Leia outros textos sobre o assunto, tocando ou clicando na tag ack, para conhecer melhor a ferramenta.
Além disto, não esqueça de compartilhar o texto nas redes sociais. 😉

Referências

https://beyondgrep.com/.
http://www.activestate.com/blog/2016/12/grep-losing-its-grip.

Como obter informações sobre o hardware de vídeo no Linux

Quando você precisa relatar algum problema, para conseguir ajuda, pode ser necessário inquirir o seu sistema para saber exatamente qual o modelo de dispositivo em uso.
Você pode obter informações detalhadas sobre a sua placa de vídeo, seja ela dedicada, separada ou integrada ao restante do hardware, com os comandos lspci e lshw.
amd-radeon-graphics-badge-on-dell-laptop
Se quiser entender melhor o funcionamento do lshw, leia este artigo.
Ambos podem ser usados para obter informações sobre diversos aspectos do seu hardware. Neste post, vou me concentrar em obter dados apenas do hardware de vídeo.
O comando grep, neste caso, é essencial para filtrar as informações obtidas e exibir apenas o que interessa. Se tiver dúvidas, leia mais sobre ele aqui.

Como obter informações sobre a placa de vídeo com o comando lspci

O comando é um utilitário voltado para exibir informações sobre o os buses PCI presentes no sistema, bem como os dispositivos conectados a eles.
Com o uso de algumas opções, na linha de comando, é possível obter um saída mais resumida.
É possível também obter uma saída de informações mais verbosa — voltada para hackers mais experientes.
Alguns dados do hardware podem estar disponíveis apenas para usuários com privilégios administrativos — nestes casos, use o comando su ou sudo.
Nos exemplos dados, neste artigo, os comandos são executados pelo superusuário.
Você pode usar o comando lspci, acompanhado das opções ‘-v’, ‘-vv’ ou ‘-vvv’ para obter um resultado cada vez mais abundante de informações. A primeira opção ativa a verbosidade, a segunda aumenta e a última ativa o nível máximo de informações.
Veja um exemplo:

lspci -v | grep -A 20 -i display
04:00.0 Display controller [0380]: Advanced Micro Devices, Inc. [AMD/ATI] Topaz XT [Radeon R7 M260/M265] [1002:6900]
	Subsystem: Dell Device [1028:0643]
	Physical Slot: 4
	Flags: fast devsel, IRQ 7
	Memory at b0000000 (64-bit, prefetchable) [disabled] [size=256M]
	Memory at c0000000 (64-bit, prefetchable) [disabled] [size=2M]
	I/O ports at 3000 [disabled] [size=256]
	Memory at c2000000 (32-bit, non-prefetchable) [disabled] [size=256K]
	Expansion ROM at c2040000 [disabled] [size=128K]
	Capabilities: [48] Vendor Specific Information: Len=08 <?>
	Capabilities: [50] Power Management version 3
	Capabilities: [58] Express Legacy Endpoint, MSI 00
	Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+
	Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
	Capabilities: [150] Advanced Error Reporting
	Capabilities: [270] #19
	Capabilities: [2b0] Address Translation Service (ATS)
	Capabilities: [2c0] #13
	Capabilities: [2d0] #1b

Use um número maior para a opção ‘-A’, caso desconfie que haja mais algumas linhas de informações sobre o dispositivo.
As primeiras linhas costumam ser mais do que suficiente para informar o modelo exato de placa de vídeo em uso no sistema.

Como obter informações da placa de vídeo com o comando lshw

Como ele demora um pouco para pesquisar o hardware, costumo guardar suas informações em um arquivo texto, que posso ler sem a necessidade de “invocar superpoderes” e com mais rapidez:

sudo lshw > lshw.log

Para obter informações exclusivamente sobre a classe display, use o comando assim:

lshw -class display
  *-display               
       description: VGA compatible controller
       product: Broadwell-U Integrated Graphics
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       version: 09
       width: 64 bits
       clock: 33MHz
       capabilities: msi pm vga_controller bus_master cap_list rom
       configuration: driver=i915 latency=0
       resources: irq:65 memory:c1000000-c1ffffff memory:d0000000-dfffffff ioport:5000(size=64)
  *-display UNCLAIMED
       description: Display controller
       product: Topaz XT [Radeon R7 M260/M265]
       vendor: Advanced Micro Devices, Inc. [AMD/ATI]
       physical id: 0
       bus info: pci@0000:04:00.0
       version: 00
       width: 64 bits
       clock: 33MHz
       capabilities: pm pciexpress msi cap_list
       configuration: latency=0
       resources: memory:b0000000-bfffffff memory:c0000000-c01fffff ioport:3000(size=256) memory:c2000000-c203ffff memory:c2040000-c205ffff

De posse deste resultado, é possível procurar informações sobre a sua placa gráfica no Google ou em fóruns específicos usando os nomes nos campos product e vendor.

No caso de uma placa de vídeo integrada à placa-mãe, você provavelmente só irá conseguir obter informações úteis se informar o modelo da placa-mãe.
Alguns fabricantes não disponibilizam informações ou manuais sobre a placa de vídeo, em separado, nestes casos.

O comando, a seguir, oferece os dados referentes à placa mãe ou motherboard:

lshw -class bus
Busca do google por nome do dispositivo
Busca do google por nome do dispositivo

Como obter informações da placa de vídeo com o comando dmidecode

O dmidecode pode parecer redundante, depois de falarmos do lshw — uma vez que este último também pesquisa na tabela DMI.
A saída é dada em formatos diferentes, contudo. Vale a pena abordar este comando também.
Veja como obter dados da placa — útil, quando a placa de vídeo é integrada:

dmidecode -t baseboard | grep -B 2 -i product 
Base Board Information
	Manufacturer: Dell Inc.
	Product Name: 0YDTG3

Ou use a opção que segue para obter informações mais detalhadas da placa mãe:

dmidecode --type 2
# dmidecode 2.12
SMBIOS 2.7 present.

Handle 0x0002, DMI type 2, 15 bytes
Base Board Information
	Manufacturer: Dell Inc.
	Product Name: 0YDTG3
	Version: A02
	Serial Number: .SF5WERT3.GR9983062FS132.
	Asset Tag: Not Specified
	Features:
		Board is a hosting board
		Board is replaceable
	Location In Chassis: Type2 - Board Chassis Location
	Chassis Handle: 0x0003
	Type: Motherboard
	Contained Object Handles: 0

Dispositivos on board podem ser exibidos com a seguinte opção:

dmidecode --type 10

Sua lista pode ser maior do que a minha:

# dmidecode 2.12
SMBIOS 2.7 present.

Handle 0x0018, DMI type 10, 6 bytes
On Board Device Information
	Type: Video
	Status: Disabled
	Description: Intel Video Graphics Controller

Use a opção ‘–type 41’, para obter uma relação maior.

Como criar scripts a partir do histórico de comandos do MySQL

As queries ou consultas feitas no cliente interativo MySQL, que funcionam bem, podem ser facilmente convertidas em scripts para automatizar suas tarefas ou adiantar o seu trabalho como desenvolvedor — seja qual for a sua linguagem de programação.
Logo MySQL sobre um fundo com um lago e um barco
A solução relatada neste artigo permite reusar as queries, de uma sessão anterior do MySQL, que estão funcionando para você, em um script.

Use um arquivo tee ou o histórico do MySQL

Uma das formas de reusar as queries MySQL, dentro de um script, é buscá-las a partir de um arquivo tee.
No artigo, Como guardar o histórico dos comandos no MySQL em um arquivo externo, eu explico o procedimento em detalhes.
Outra forma, é buscar as queries no arquivo de histórico padrão do MySQL, importar o texto e ir retirando tudo o que não serve ao seu script.
Neste caso, comece por digitar suas queries no cliente MySQL, normalmente — se certificando de que estejam funcionando sintaticamente e entregando os resultados desejados.
Em seguida, saia do MySQL, com o comando quit e liste o arquivo do histórico da sua sessão, da linha de comando:

cat .mysql_history

No Linux, o arquivo do histórico costuma ficar armazenado no seu diretório home.
Experimente combinar o comando cat com o comando grep, para obter resultados mais precisos em relação ao que te interessa:

cat .mysql_history grep -e select

Exemplo de execução do comando cat com o comando grep
Clique, para ver detalhes.

O arquivo do histórico, bem como aquele criado pelo comando tee, pode ser aberto no seu editor de scripts favorito, de onde você pode extrair as queries que deseja e editá-las como bem entender.
captura de tela komodo editor