Usando o grep para listar certas linhas de um arquivo

1

Usando um arquivo aleatório, como /usr/share/vim/vim74/tutor/tutor , existe uma maneira de listar todas as linhas que começam com uma palavra de 5 letras? Como sobre as linhas que terminam com uma palavra de 5 letras? Eu estive pensando sobre isso por um tempo agora, mas eu não cheguei a lugar nenhum ainda. Alguém sabe uma solução ? (Eu não tenho certeza se é factível, é apenas um experimento mental)

    
por user43389 09.01.2015 / 01:26

2 respostas

0

grep -E '(^[[:alpha:]]{5}[^[:alpha:]]|[^[:alpha:]][[:alpha:]]{5}$)' /usr/share/vim/vim74/tutor/tutor

grep -E usa o egrep

'(a|b)' pesquisa padrão a ou padrão b

^ é o início da linha, $ é o fim da linha

[[:alpha:]]{5} significa 5 letras consecutivas

[^[:alpha:]] significa não-uma-letra

Então, estamos usando o egrep para procurar:

  • início da linha, 5 letras e, em seguida, uma não-letra; ou
  • sem letras, 5 letras e depois no final da linha
por 09.01.2015 / 01:39
0

Depende um pouco exatamente o que você quer dizer com uma palavra , mas algo como

grep -E '^[[:alnum:]]{5}\b'

(cinco caracteres seguidos por um limite de palavras, ancorados no início da linha) ou, se a sua versão do grep suportar expressões regulares compatíveis Perl (PCRE)

grep -P '^\w{5}\b' 

(cinco caracteres de palavras seguidos por um limite de palavras, ancorados no início da linha). Para o fim de linha, os equivalentes seriam algo como

grep -E '\b[[:alnum:]]{5}$' file

ou

grep -P '\b\w{5}$' 

Note que, para o arquivo específico que você mencionou, a maioria das linhas começa com espaços em branco iniciais: se você quiser ignorar isso, precisará fazer algo como grep -E '^[[:space:]]*[[:alnum:]]{5}\b' ou seu equivalente em% PC_de%.

    
por 09.01.2015 / 01:49

Tags