Você tem dois problemas:
- Globbing interfere no seu regexp
- Seu regexp não corresponde ao que deve corresponder
Descobrindo o mecanismo de globbing
sudo find /dev | grep sd*
não funciona como antes porque você tem um arquivo ou uma pasta em seu diretório de trabalho atual que aciona o globbing do bash. Adicione um echo
na frente do seu comando para ver o que o globbing faz ao seu comando
echo grep sd*
Ao adicionar um caractere adicional aleatório, o globbing não corresponde mais ao arquivo / pasta e o grep continua a funcionar como esperado.
Como evitar globbing
Para evitar que o globbing seja ativado, você precisa colocar '...'
em seu período. (Aspas duplas funcionarão também.) Isso fará com que o grep se comporte como antes:
sudo find /dev | grep 'sd*'
Como funcionam as expressões regulares
Agora que o regexp está funcionando como esperado, vamos ver o que *
significa em expressões regulares em oposição a globalização de arquivos. Em suma, significa "Este último caractere zero ou n vezes" e isso provavelmente não é o que você deseja. Usando 'sd*'
, você pode ver /dev/stdout
na saída, pois stdout
começa com s
seguido por zero ou mais d
's.
No seu caso, um simples:
sudo find /dev | grep sd
deve ser tudo que você precisa para corresponder.
Ou, é claro, você pode simplesmente executar um dos seguintes comandos (que usam padrões de glob de arquivos, não expressões regulares) para fornecer a mesma saída:
find /dev -name 'sd*'
ls -1 /dev/sd*