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:
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.
- Baixe o seguinte texto: Project Gutenberg Text e salve-o como
test.txt
. - 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ê! 😇
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.
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
.
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
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".
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
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:
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! 👏