Domine o Comando `look` no Linux: Busca Binária vs. Linear

O comando `look` no Linux é uma ferramenta que examina um arquivo e exibe todas as linhas que iniciam com uma palavra ou frase específica. No entanto, é crucial estar ciente de que seu comportamento pode variar entre diferentes distribuições Linux. Este guia prático demonstrará como utilizar este comando de maneira eficaz.

Comportamento Divergente do Comando `look` no Ubuntu

O comando `look`, apesar de parecer simples, gerou algumas dúvidas durante a pesquisa para este artigo, principalmente devido a questões de compatibilidade e documentação.

Testamos este comando no Ubuntu, Fedora e Manjaro. Em todas essas distribuições, o comando `look` estava presente, o que foi ótimo. Contudo, o comportamento não era uniforme nas três plataformas. A versão do Ubuntu apresentava diferenças notáveis. Segundo a documentação do Ubuntu, o comportamento deveria ser idêntico.

A investigação revelou que, tradicionalmente, o comando `look` emprega uma busca binária, enquanto a versão do Ubuntu utiliza uma busca linear. Curiosamente, as páginas de manual online do Ubuntu para as versões Bionic Beaver (18.04), Cosmic Cuttlefish (18.10) e Disco Dingo (19.04) afirmam que a versão do Ubuntu usa uma busca binária, o que não corresponde à realidade.

Ao consultar a página de manual local do Ubuntu, fica evidente que o `look` utiliza uma busca linear. No entanto, existe uma opção de linha de comando para forçar o uso de uma busca binária. As versões nas outras distribuições não oferecem a opção de alternar entre esses métodos de busca.

man look

Na página do manual, encontramos a seção que detalha essa versão do `look` usando uma busca linear em vez de binária.

A lição principal é sempre consultar as páginas de manual locais primeiro.

Busca Linear vs. Busca Binária

A busca binária é notavelmente mais rápida e eficiente que a busca linear, especialmente ao lidar com arquivos extensos. A desvantagem da busca binária é que o arquivo deve estar ordenado. Se a ordenação do arquivo não for desejada, é recomendável ordenar uma cópia do arquivo para utilizar com o comando `look`.

Este procedimento será demonstrado mais adiante neste artigo. É importante notar que, no Fedora, Manjaro e provavelmente na maioria das outras distribuições Linux, será necessário criar uma cópia ordenada do arquivo para trabalhar com o comando `look`.

Instalando o Arquivo “words”

O comando `look` pode ser utilizado com qualquer arquivo de texto ou com o arquivo de dicionário local “words”.

No Manjaro, é necessário instalar o arquivo “words”. Use o seguinte comando:

sudo pacman -Syu words

Utilizando o Comando `look`

Para este guia, usaremos um arquivo de texto do poema “The Jumblies” de Edward Lear.

Vamos visualizar o conteúdo do arquivo com o seguinte comando:

less the-jumblies.txt

Abaixo, está a primeira parte do poema. Observe que estamos utilizando o Ubuntu, portanto, o arquivo permanece desordenado. Para Fedora e Manjaro, trabalharíamos com uma cópia ordenada do arquivo, o que abordaremos posteriormente.

Se pesquisarmos por linhas que começam com a palavra “Eles”, descobriremos algumas ações dos Jumblies.

look They the-jumblies.txt

O comando `look` exibirá estas linhas:

Ignorando Diferenças entre Maiúsculas e Minúsculas

Para instruir o comando `look` a ignorar as diferenças entre maiúsculas e minúsculas, utilize a opção `-f` (ignorar maiúsculas e minúsculas). Usaremos “they” como a palavra de pesquisa novamente, mas desta vez, em minúsculas.

look -f they the-jumblies.txt

Desta vez, os resultados incluem uma linha adicional.

A linha que começa com “ELES” não foi incluída no último conjunto de resultados, pois está em maiúsculas e não corresponde ao nosso termo de pesquisa, “they”.

Ignorar maiúsculas e minúsculas permite que o `look` inclua esses resultados.

Utilizando `look` com um Arquivo Ordenado

Se sua distribuição Linux possui uma versão do `look` que segue o comportamento tradicional de usar uma busca binária, é essencial ordenar o arquivo ou trabalhar com uma cópia ordenada dele.

Vamos repetir o comando para pesquisar por “Eles”, mas desta vez no Manjaro.

Como se pode observar, nenhum resultado foi retornado. Entretanto, sabemos que existem versos no poema que iniciam com a palavra “Eles”.

Vamos criar uma cópia ordenada do arquivo. Se você for utilizar as opções `-f` (ignorar maiúsculas e minúsculas) ou `-d` (caracteres alfanuméricos e espaços apenas) com o `look`, elas também devem ser utilizadas ao ordenar o arquivo.

A opção `-o` (saída) permite especificar o nome do arquivo para o qual as linhas ordenadas devem ser adicionadas. Neste exemplo, o nome do arquivo será “sorted.txt”.

sort -f -d the-jumblies.txt -o sorted.txt

Vamos examinar o arquivo sorted.txt e, em seguida, utilizar as opções `-f` e `-d`.

Agora, obtemos os resultados que esperávamos.

Considerando Apenas Espaços e Caracteres Alfanuméricos

Para instruir o comando `look` a ignorar tudo que não seja um caractere alfanumérico ou um espaço, utilize a opção `-d` (alfanumérico).

Vamos verificar se há alguma palavra que comece com “Oh”.

look -f oh the-jumblies.txt

Nenhum resultado é retornado pelo comando `look`.

Vamos tentar novamente, instruindo o `look` a ignorar tudo que não seja caracteres alfanuméricos e espaços. Isso significa que caracteres e símbolos, como pontuação, serão ignorados.

look -f -d oh the-jumblies.txt

Desta vez, obtemos um resultado. Essa linha não foi encontrada anteriormente porque as aspas e o ponto de exclamação confundiram a pesquisa.

Especificando o Caractere de Terminação

Você pode instruir o `look` a utilizar um caractere específico como caractere de terminação. Normalmente, espaços e finais de linhas são utilizados como caractere de terminação.

A opção `-t` (caractere de terminação) permite especificar o caractere desejado. Neste exemplo, usaremos o caractere apóstrofo. Precisamos citá-lo com uma barra invertida para que o `look` reconheça que não estamos iniciando uma string.

Também citamos o termo de pesquisa, pois ele inclui um espaço. Estamos pesquisando por duas palavras.

look -f -t \' "they call" the-jumblies.txt

Os resultados correspondem ao termo de pesquisa, encerrados pelo apóstrofo que usamos como caractere de terminação.

Utilizando `look` Sem um Arquivo

Se nenhum nome de arquivo for fornecido na linha de comando, o comando `look` utilizará o arquivo de palavras.

O comando:

Retornará os seguintes resultados:

Estas são todas as palavras no arquivo que iniciam com a palavra “circle”.

Conclusão

Isso é tudo o que você precisa saber sobre o comando `look`.

É uma ferramenta fácil de usar, uma vez que você está ciente das diferenças de comportamento entre as diversas distribuições Linux e consegue identificar se a sua versão utiliza uma busca binária ou linear.