Você arrumou um emprego em uma biblioteca local, ajudando a organizar a coleção de livros antigos dela. Os estudantes que frequentam a biblioteca vivem caçando citações que lembram só pela metade para citar em seus trabalhos acadêmicos. Em vez de ler manualmente cada livro de capa a capa, você decide criar uma pequena ferramenta para escaneá-los em busca dessas citações parciais.
Busque em arquivos as linhas que correspondem a uma string de busca e retorne todas as linhas correspondentes.
O comando grep do Unix busca, nos arquivos, as linhas que correspondem a uma expressão regular.
Sua tarefa é implementar um comando grep simplificado, que permite buscar por strings fixas.
O comando grep recebe três argumentos:
Em seguida, lê o conteúdo dos arquivos especificados (na ordem especificada), encontra as linhas que contêm a string de busca e, por fim, retorna essas linhas na ordem em que foram encontradas. Ao buscar em vários arquivos, cada linha correspondente é precedida pelo nome do arquivo e dois-pontos (':').
O comando grep aceita as seguintes flags:
-n Adiciona o número da linha e dois-pontos (':') no início de cada linha da saída, colocando o número depois do nome do arquivo (se houver).-l Exibe apenas os nomes dos arquivos que contêm pelo menos uma linha correspondente.-i Faz a correspondência usando uma comparação que ignora maiúsculas e minúsculas.-v Inverte o programa: coleta todas as linhas que não correspondem.-x Busca apenas as linhas em que a string de busca corresponde à linha inteira.O Powershell dá suporte a parâmetros switch em funções, que se comportam de forma parecida com flags na linha de comando.
Seguindo o costume do Powershell de ter nomes detalhados e verbosos para cmdlets e suas propriedades, as flags usadas neste exercício também têm seus nomes alterados para refletir a linguagem.
Line (-n): Acrescenta o número da linha e dois-pontos (':') ao início de cada linha da saída, colocando o número depois do nome do arquivo (se houver).File (-l): Exibe apenas os nomes dos arquivos que contêm pelo menos uma linha correspondente.Insensitive (-i): Faz a correspondência usando uma comparação que não diferencia maiúsculas de minúsculas.Invert (-v): Inverte o programa: coleta todas as linhas que não correspondem.Whole (-x): Busca apenas linhas em que a string de busca corresponde à linha inteira.Seu foco principal deve ser implementar a função grep, e não se preocupar em obter o caminho dos arquivos corretamente.
Este exercício fornecerá 3 arquivos de texto obrigatórios: iliad.txt, midsummer-night.txt e paradise-lost.txt na suíte de testes. Você pode simplesmente acessar o conteúdo deles com Get-Content, usando a string com o nome em vez do caminho de arquivo usual.
O Powershell tem sim um cmdlet semelhante ao grep chamado Select-String, e você pode ler mais sobre ele aqui se tiver interesse.
Você não deve usar Select-String neste exercício em momento algum.
Crie sua conta no Exercism para aprender e dominar PowerShell com 136 exercícios e mentoria humana de verdade, tudo de graça.