Grep

Grep

Médio

Introdução

Arranjaste um emprego numa biblioteca local para ajudar a organizar a coleção de livros antigos. Os estudantes que a frequentam andam muitas vezes à procura de citações vagamente recordadas para citar nos seus trabalhos académicos. Em vez de leres manualmente todos os livros de fio a pavio, decides construir uma pequena ferramenta para os percorrer à procura dessas citações parciais.

Instruções

Procura em ficheiros as linhas que correspondem a uma string de pesquisa e devolve todas as linhas correspondentes.

O comando grep do Unix procura em ficheiros as linhas que correspondem a uma expressão regular. A tua tarefa é implementar um comando grep simplificado, que suporta a procura de strings fixas.

O comando grep recebe três argumentos:

  1. A string a procurar.
  2. Zero ou mais opções para personalizar o comportamento do comando.
  3. Um ou mais ficheiros onde procurar.

De seguida, lê o conteúdo dos ficheiros indicados (pela ordem indicada), encontra as linhas que contêm a string de pesquisa e, por fim, devolve essas linhas pela ordem em que foram encontradas. Ao procurar em vários ficheiros, cada linha correspondente é precedida pelo nome do ficheiro e por dois pontos (':').

Opções

O comando grep suporta as seguintes opções:

  • -n Acrescenta no início de cada linha da saída o número da linha e dois pontos (':'), colocando o número depois do nome do ficheiro (se existir).
  • -l Mostra apenas os nomes dos ficheiros que contêm pelo menos uma linha correspondente.
  • -i Compara sem distinguir maiúsculas de minúsculas.
  • -v Inverte o programa, ou seja, reúne todas as linhas que não correspondem.
  • -x Procura apenas as linhas em que a string de pesquisa corresponde à linha inteira.

Track de Powershell

Alteração das flags

O Powershell suporta parâmetros do tipo switch nas funções, que funcionam de forma semelhante às flags da linha de comandos.

Para manter o costume do Powershell de dar nomes detalhados e verbosos aos cmdlets e às suas propriedades, as flags usadas neste exercício também têm o nome alterado para refletir a linguagem.

  • Line (-n): Antepõe o número da linha e dois pontos (':') a cada linha da saída, colocando o número depois do nome do ficheiro (se existir).
  • File (-l): Apresenta apenas os nomes dos ficheiros que contêm pelo menos uma linha correspondente.
  • Insensitive (-i): Faz a correspondência sem distinguir maiúsculas de minúsculas.
  • Invert (-v): Inverte o programa: recolhe todas as linhas que não correspondem.
  • Whole (-x): Procura apenas as linhas em que a string de pesquisa corresponde à linha inteira.

Tratamento dos ficheiros

O teu foco principal deve ser implementar a função grep e não te preocupares em obter corretamente o caminho para os ficheiros.

Este exercício fornece 3 ficheiros de texto obrigatórios na suite de testes: iliad.txt, midsummer-night.txt e paradise-lost.txt. Podes simplesmente aceder ao seu conteúdo com Get-Content, usando o nome do ficheiro em vez do caminho habitual.

Cmdlet

O Powershell tem de facto um cmdlet semelhante ao grep chamado Select-String, e podes ler mais sobre ele aqui se estiveres interessado. Não deves usar o Select-String em nenhum momento neste exercício.

Editar via GitHub A ligação abre numa nova janela ou separador
PowerShell Exercism

Estás pronto para começar Grep?

Inscreve-te no Exercism para aprenderes e dominares PowerShell com 136 exercícios, e mentoria humana real, tudo grátis.