linhas grep começando com “1” no Ubuntu

34

Eu tento procurar linhas que começam com "1" usando

ls -1 | grep ^1*

mas retorna linhas que não começam com 1. O que eu sinto falta aqui?

    
por Tim 30.12.2012 / 23:14

4 respostas

57

Sua expressão regular não significa o que você acha que faz. Ele combina todas as linhas iniciando (^) com um (1) zero repetido ou mais (*) vezes. Todas as strings correspondem à expressão regular. grep '^1' faz o que você quer.

    
por 30.12.2012 / 23:29
30

Você tentou o seguinte?

 ls -1 | grep "^1"

Ou seja, remova o * , que basicamente diz grep , encontre zero ou mais ocorrências da expressão ^1 . Em outras palavras: combine as linhas que começam com 1 ou não.

    
por 30.12.2012 / 23:28
11

Embora isso não responda à sua pergunta, essa é uma solução melhor para o que parece ser seu objetivo:

ls -ld 1*

Você pode usar um shell glob para listar todos os arquivos que começam com 1 . Note que * tem um significado diferente no shell globbing do que expressões regulares.

    
por 31.12.2012 / 04:27
3

^ 1. * corresponde à linha inteira, ou, como dito acima, ^ 1 obteve a string contida na linha.

diferentes estilos de regex usam diferentes símbolos representando chars, 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 cadeia de caracteres.

    
por 31.12.2012 / 06:00