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.

Processo do Node

Diferente de outros exercícios, grep.js não é importado dentro do arquivo de teste grep.spec.js. Em vez disso, ele será usado como se fosse um executável. Para facilitar isso, o arquivo grep.js foi preparado com um shebang e um comentário que explica o que isso faz:

#!/usr/bin/env node

// The above line is a shebang. On Unix-like operating systems, or environments,
// this will allow the script to be run by node, and thus turn this JavaScript
// file into an executable. In other words, to execute this file, you may run
// the following from your terminal:
//
// ./grep.js args
//
// If you do not have a Unix-like operating system or environment, for example
// Windows without WSL, you can use the following inside a window terminal,
// such as cmd.exe:
//
// node grep.js args
//
// Read more about shebangs here: https://en.wikipedia.org/wiki/Shebang_(Unix)

Os testes vão iniciar um novo processo do node, executando grep.js.

Lendo os argumentos

Para obter os argumentos com que o processo foi iniciado, use process.argv.

Lendo arquivos

A função readLines já foi fornecida. Não é preciso transformar o caminho do arquivo para usá-la. A função readlines vai resolver o caminho a partir do diretório de trabalho atual, que, para os processos do grep.js, é definido como o diretório do exercício.

Escrevendo a saída

Para escrever a saída, use

  • console.log para escrever no fluxo de saída padrão,
  • console.error para escrever no fluxo de erro padrão.

Os testes consideram a execução bem-sucedida (resolvida) se nada for escrito no fluxo de erro padrão, e malsucedida (rejeitada) se algo for escrito no fluxo de erro padrão.

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

Tudo pronto para começar Grep?

Crie sua conta no Exercism para aprender e dominar JavaScript com 37 conceitos159 exercícios e mentoria humana de verdade, tudo de graça.