Eu tento procurar por linhas que começam com "1" usando
ls -1 | grep ^1*
mas retorna linhas que não começam com 1. O que estou perdendo aqui?
Eu tento procurar por linhas que começam com "1" usando
ls -1 | grep ^1*
mas retorna linhas que não começam com 1. O que estou perdendo aqui?
ls
saída, terá problemas se os nomes de arquivos contiverem caracteres estranhos, como novas linhas ... Muitos outros comandos (de alguma formals
, pelo menos não a versão que eu tenho que verificar) tem uma opção para fornecer saída separada nula, com a qual você pode processar com segurançagrep -z
Respostas:
Sua expressão regular não significa o que você pensa que faz. Corresponde a todas as linhas que começam (^) com um (1) zero repetido ou mais (*) vezes. Todas as cadeias correspondem a essa expressão regular.
grep '^1'
faz o que você quer.fonte
Você tentou o seguinte?
Ou seja, remova o
*
, que basicamente dizgrep
, encontre zero ou mais ocorrências da^1
expressão. Em outras palavras: combine as linhas que começam com 1 ou não.fonte
Embora isso não responda à sua pergunta, esta é uma solução melhor para o que parece ser seu objetivo:
Você pode usar um shell glob para listar todos os arquivos que começam com
1
. Observe que*
tem um significado diferente no globbing do shell do que nas expressões regulares.fonte
*
é um curinga que significa "0 ou mais de qualquer caractere". O significado de regex é explicado na resposta de otokan.^ 1. * corresponde à linha inteira, ou exatamente como dito acima, ^ 1 obteve a string contida na linha.
estilos diferentes de regex usam símbolos diferentes que representam caracteres, algumas opções especificam qual estilo você deseja. e opções diferentes especificam se você deseja corresponder a linha inteira, ou apenas parte dela, ou toda a entrada como uma sequência.
fonte