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.