Use o quantificador especificado no grep para recuperar o vocabulário satisfeito

1

Eu tento pegar palavras de um arquivo:

$ grep -o '\*\*[^*]*\*\*' Principles_20_LifePrinciples.md | grep -v -e "Origin" -e "Etymology"
**circumstance**
**case**
**condition**
**Anxiety**
**anxiety**
**the state of feeling nervous or worried that sth bad is going to happen**
**a worry or fear about sth**
**a strong feeling of wanting to do sth or of wanting sth to happen**

O resultado que pretendo é obter apenas palavras:

**circumstance**
**case**
**condition**
**Anxiety**
**anxiety**

Código refatorado com quatificadores especificados {,20} :

$ grep -E -o '\*\*[^*]{,20}\*\*' Principles_20_LifePrinciples.md

Infelizmente, não retorna nada.

Como resolver esse problema?

    
por JawSaw 27.03.2018 / 08:53

1 resposta

2

Com o BSD grep, veja man 7 re_format para detalhes das expressões regulares suportadas. Em particular, diz:

 A bound is '{' followed by an unsigned decimal integer, possibly followed
 by ',' possibly followed by another unsigned decimal integer, always fol-
 lowed by '}'.  The integers must lie between 0 and RE_DUP_MAX (255=)
 inclusive, and if there are two of them, the first may not exceed the
 second.

Apenas o segundo número pode ser omitido; o primeiro tem para ser dado.

Com essa correção:

$ /usr/bin/grep --version
grep (BSD grep) 2.5.1-FreeBSD
$ /usr/bin/grep -Eo '\*\*[^*]{0,20}\*\*' foo
**circumstance**
**case**
**condition**
**Anxiety**
**anxiety**
    
por 27.03.2018 / 09:02