Re: Una de expresiones regulares
On Tue, Nov 22, 2016 at 03:02:51PM +0100, José Miguel (sio2) wrote:
> El lun, 21 de nov de 2016, a las 01:58:38 -0500, Carlos Zuniga dijo:
>
> > Esto me funciona:
> >
> > $ cat foo
> > dos tres cuatro
> > uno dos tres cuatro
> > uno dos tres cuatro cinco
> >
> > $ grep -E '^(\w+\s+){3}\w+$' foo
> > uno dos tres cuatro
> >
>
> Gracias, pero no busco una solución, sino saber por qué la solución dada
> no es (aparentemente) solución. Una alteranativa más aprecida a la
> solución que das es esta (salvando el hecho de que como aparezcan comas
> no vale):
>
> $ grep -E '^(\b\w+\b\s*){4}$'<<<"a bc df"
> a bc df
>
> ¿Por qué no desecha esa línea si no hay cuatro palabras?
Quizás encontraste un bug en grep. Estuve haciendo pruebas con la
expresión que indicas y entrega resultados cuando el número de
ocurrencias es tres (el esperado), cuatro y cinco. Si pruebas con:
$ grep -E '^(\b\w+\b\s*){4}$'<<<"a bc df gh"
$ grep -E '^(\b\w+\b\s*){5}$'<<<"a bc df gh"
$ grep -E '^(\b\w+\b\s*){6}$'<<<"a bc df gh"
$ grep -E '^(\b\w+\b\s*){7}$'<<<"a bc df gh"
verás que ocurre algo similar.
Si pruebas con "a bc df gh jk" y cambias las coincidencias a 5, 6, 7, 8
y 9, ocurre lo mismo.
Intenté verificar si la cadena de caracteres se modificaba de algún
modo, pero al filtar el resultado con od, parece no haber nada anormal:
$ grep -E '^(\b\w+\b\s*){2}$'<<<"a bc df" | od -bc
0000000
$ grep -E '^(\b\w+\b\s*){3}$'<<<"a bc df" | od -bc
0000000 141 040 142 143 040 144 146 012
a b c d f \n
0000010
$ grep -E '^(\b\w+\b\s*){4}$'<<<"a bc df" | od -bc
0000000 141 040 142 143 040 144 146 012
a b c d f \n
0000010
$ grep -E '^(\b\w+\b\s*){5}$'<<<"a bc df" | od -bc
0000000 141 040 142 143 040 144 146 012
a b c d f \n
0000010
$ grep -E '^(\b\w+\b\s*){6}$'<<<"a bc df" | od -bc
0000000
Saludos.
--
Pablo Jiménez
Reply to: