Grep

Grep

Médio

Introdução

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.

Instruções

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:

  1. A string a ser buscada.
  2. Zero ou mais flags para personalizar o comportamento do comando.
  3. Um ou mais arquivos nos quais buscar.

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 (':').

Flags

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.

Palavras

Implemente:

  • grep ( pattern flags files -- lines )

pattern é a string de busca, flags é um array de zero ou mais das strings de flag "-n", "-l", "-i", "-v" e "-x", e files é um array de um ou mais nomes de arquivo. Retorne as linhas correspondentes (com os prefixos de nome de arquivo e de número de linha solicitados) como um array de strings.

Quando a flag -l for fornecida, retorne um array com os nomes dos arquivos que contêm pelo menos uma correspondência.

Ler arquivos

Leia as linhas de um arquivo com file-lines, passando uma codificação:

USING: io.encodings.utf8 io.files ;

"iliad.txt" utf8 file-lines
! => { "Achilles sing, O Goddess! Peleus' son;" ... }

Os três arquivos de exemplo (iliad.txt, midsummer-night.txt e paradise-lost.txt) acompanham o exercício no diretório de trabalho, então ler pelo nome funciona sem problema.

Editar via GitHub O link abre em uma nova janela ou aba
Factor Exercism

Tudo pronto para começar Grep?

Crie sua conta no Exercism para aprender e dominar Factor com 47 conceitos163 exercícios e mentoria humana de verdade, tudo de graça.