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.
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:
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 (':').
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.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.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.
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.
Inscreve-te no Exercism para aprenderes e dominares PowerShell com 136 exercícios, e mentoria humana real, tudo grátis.