Como grep todas as palavras que começam com dígito?

1

Eu estou querendo saber como grep todas as palavras que começam com dígito. Até agora, eu fiz isso:

egrep "^[[:digit:]]" tst

Mas ele me imprime apenas linhas começando com dígito.

Agradecemos antecipadamente com ajuda.

    
por JEl 13.11.2015 / 22:52

3 respostas

3

Se o seu grep suportar PerEx Compatible RegExp ( -P ), você pode fazer:

grep -Po '(?<=^|\s)\d[^\s]*(?=\s|$)' file.txt
  • Supondo que word significava caracteres separados apenas por espaços em branco

  • ?<=^|\s) é a largura zero positiva que fica atrás do padrão, garantindo que a palavra desejada seja precedida pelo início da linha ou por um espaço em branco

  • \d[^\s]* é a nossa correspondência desejada, palavra que começa com um dígito

  • (?=\s|$) é o padrão lookahead positivo com largura zero garantindo que a correspondência desejada seja seguida por um espaço em branco ou fim da linha.

por 13.11.2015 / 23:04
1

Se você quiser imprimir uma lista das palavras que começam com um dígito, um por linha, você pode fazer isso:

tr -cs '[:digit:][:alpha:]' '\n' | grep '^[:digit:]'

O comando tr lista todas as cadeias de caracteres alfanuméricos, uma por linha. Então, o grep só precisa ver os dígitos no começo da linha.

    
por 14.11.2015 / 07:04
1

Eu sugeriria

echo "foo bar 11baz q3ux
one, 2two? three!" | grep -o '\<[[:digit:]][^[:blank:]]*\>'
11baz
2two

Isso usa \< e \> para marcadores de início e fim de palavra, respectivamente.

    
por 15.11.2015 / 01:02