/lnpg

Primary LanguageGo

Aqui está uma versão adaptada do seu guia com as alterações solicitadas, como o uso de all no lugar de "" para corresponder todas as linhas, e a modificação para garantir que o comando ./grep seja usado onde necessário, considerando o contexto do seu código Go:


Passo Zero

Como em muitas linguagens de programação, começamos com o índice zero!

Para este passo, configure seu IDE/editor de escolha e a linguagem de programação de escolha. Depois, siga as instruções abaixo para estar pronto para testar sua solução.

  1. Baixe o seguinte texto: Project Gutenberg Text e salve-o como test.txt.
  2. Baixe os dados de teste adicionais do Dropbox (ou fornecidos em outro link) e descompacte-os. Depois de descompactar, você deve ter o seguinte diretório de teste:
% tree
.
├── rockbands.txt
├── symbols.txt
├── test-subdir
│   └── BFS1985.txt
└── test.txt

Se você estiver no Windows, pode usar GoW, GitBash ou, se for usuário do PowerShell, traduzir os comandos para PowerShell. Isso deve ser bem simples para você! 😇


Passo 1 - Expressão vazia (Agora usando "all")

O objetivo aqui é implementar suporte para a expressão "all", que corresponde a todas as linhas. Ou seja, o comando grep "all" test.txt deve imprimir todas as linhas do arquivo test.txt.

Comando:

./grep rockbands.txt "all"

Comando para verificar a saída usando diff:

grep "all" rockbands.txt | diff rockbands.txt -

Se sua implementação estiver correta, a saída não mostrará diferenças, indicando que sua implementação corresponde a todas as linhas.


Passo 2 - Corresponder uma letra

Neste passo, você precisa corresponder a um padrão simples de uma letra. Quando um padrão for encontrado, o comando grep deve retornar o código de saída correto para o shell.

Comando:

./grep rockbands.txt "J"

Isso deve imprimir as linhas que contêm a letra "J", como:

Judas Priest
Bon Jovi
Junkyard

Você pode verificar o código de saída com o seguinte comando:

echo $?

Se o código de saída for 0, significa que a correspondência foi bem-sucedida. Caso contrário, será diferente de 0.


Passo 3 - Buscar recursivamente

Neste passo, você deve implementar a opção -r para permitir a pesquisa recursiva em subdiretórios. O comando grep -r Nirvana * deve retornar todas as ocorrências de "Nirvana" nos arquivos dentro do diretório e seus subdiretórios.

Comando:

grep -r Nirvana *

Isso deve retornar resultados como:

rockbands.txt:Nirvana
test-subdir/BFS1985.txt:Since Bruce Springsteen, Madonna, way before Nirvana
test-subdir/BFS1985.txt:On the radio was Springsteen, Madonna, way before Nirvana
test-subdir/BFS1985.txt:And bring back Springsteen, Madonna, way before Nirvana
test-subdir/BFS1985.txt:Bruce Springsteen, Madonna, way before Nirvana

Passo 4 - Inverter a busca com -v

Aqui, o objetivo é implementar a opção -v, que inverte a busca, excluindo qualquer linha que corresponda ao padrão. Por exemplo, se você não gostar de Madonna, pode excluir as linhas que a contêm.

Comando:

grep -r Nirvana * | grep -v Madonna

Este comando deve excluir as linhas que contêm "Madonna" e mostrar as que contêm "Nirvana", mas não "Madonna".


Passo 5 - Suporte para \d e \w

Neste passo, você deve implementar suporte para \d (um dígito) e \w (um caractere de palavra).

Teste para \d (dígitos):

grep "\d" test-subdir/BFS1985.txt

Isso deve corresponder a todas as linhas que contêm dígitos, como:

Her dreams went out the door when she turned 24
There was U2 and Blondie, and music still on MTV
'Cause she's still preoccupied with 19, 19, 1985, 1985
There was U2 and Blondie, and music still on MTV
'Cause she's still preoccupied with 1985

Teste para \w (caracteres de palavra):

grep "\w" symbols.txt

Isso deve corresponder a todas as palavras, como:

pound
dollar

Passo 6 - Suporte para ^ e $ (Início e final da linha)

Neste passo, você deve implementar suporte para os caracteres especiais ^ (início de linha) e $ (final de linha).

Teste para ^ (início de linha):

grep "^A" rockbands.txt

Isso deve retornar todas as linhas que começam com "A".

AC/DC
Aerosmith
Accept
April Wine
Autograph

Teste para $ (final de linha):

grep "na$" rockbands.txt

Isso deve retornar todas as linhas que terminam com "na", como:

Nirvana

 grep "^T" rockbands.txt | grep "a$"     

Isso deve retornar todas as linhas que começão com T e terminam com "a", como:


Passo Final - Busca insensível a maiúsculas e minúsculas com -i

O objetivo final é implementar a opção -i, que faz a busca ser insensível a maiúsculas e minúsculas.

Comando para contagem com busca sensível a maiúsculas e minúsculas:

grep A rockbands.txt | wc -l

Isso deve retornar o número de linhas que contêm "A", que será 8.

Comando para contagem com busca insensível a maiúsculas e minúsculas:

grep -i A rockbands.txt | wc -l

Isso deve retornar o número de linhas que contêm "A", independentemente de maiúsculas ou minúsculas, que será 58.

-l: Conta o número de linhas.

-w: Conta o número de palavras.

-c: Conta o número de caracteres.


Parabéns! Se você conseguiu fazer todos os passos corretamente, você completou o desafio! 👏