usando egrep e regex

0

Suponha que eu tenha o seguinte arquivo de texto chamado inputFile :

hello
HELLO
   Hello World
  wOrld
asdgfsafd 
abc 123
1 3 5 a b

e eu quero imprimir as linhas contendo apenas uma palavra (qualquer sequência com letras maiúsculas / minúsculas), independentemente de haver espaços antes ou depois do caractere, usando egrep e regex.

, então a saída deve ficar assim:

hello
HELLO
  wOrld
asdgfsafd

O melhor regex que eu criei foi

egrep ' *[a-zA-Z] *$' inputFile

mas parece não funcionar. Alguma sugestão?

    
por CowEatsGrass 06.12.2015 / 07:47

2 respostas

2

Você precisa de um + após o [A-Za-z] para que a regex corresponda a 1 ou mais, em vez de apenas uma única letra. Você também precisa ancorar o início da regex com um ^ (que corresponde ao início da linha, oposto ao $ correspondente ao final da linha)

egrep '^ *[a-zA-Z]+ *$' inputFile

Você também pode querer usar [[:space:]]* em vez de apenas * , para que as guias sejam correspondidas, bem como apenas os espaços. E [[:alpha:]] corresponde a todos os caracteres alfa da sua localidade, não apenas A-Z.

egrep '^[[:space:]]*[[:alpha:]]+[[:space:]]*$' inputFile
    
por 06.12.2015 / 08:36
1

Você começou bem. Você está procurando por uma seqüência de uma ou mais letras, sem outros caracteres não em branco na mesma linha (antes ou depois). Usando a notação + , você pode representar uma string de uma ou mais letras, como cas diz, com [a-zA-Z]+ .

Você recebe o restante do requisito nenhum outro caractere não em branco na mesma linha (antes ou depois) - fazendo uma pesquisa ancorada (ancorado ao começo e ao fim da linha, por isso, examina toda a linha) para uma seqüência (possivelmente nula) de espaços em branco, seguido por uma seqüência não nula de letras, seguido por outra seqüência (possivelmente nula) de espaços em branco:

egrep '^ *[a-zA-Z]+ *$'

Se você quiser incluir letras de fora do alfabeto latino padrão (por exemplo, à , é , ï , e ô ) e permite caracteres de espaço em branco diferente de espaço (por exemplo, Tab), use os códigos de classe de caractere:

egrep '^[[:space:]]*[[:alpha:]]+[[:space:]]*$'
    
por 06.12.2015 / 08:37