Extendidas

Para usar las Expresiones Regulares Extendidas en el comando grep deberemos usar la opción -E .

Repetición:
  • ? : Cero o una vez.
  • * : Cero o más veces.
  • + : Una o más veces.
  • {n} : n veces.
  • {n,m} : Entre n y m veces.
  • {n,} : Como mínimo n veces.
Otros:
  • ( ) : Agrupar.
  • | : Pipe Alternancia.

Archivo para el ejemplo...

$ cat numeros.txt

1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765

?

Cero o una vez.

Buscar los número con 1 o 2 dígitos...

$ grep -E "^[0-9][0-9]?$" numeros.txt

1
1
2
3
5
8
13
21
34
55
89

El símbolo ? hace que el segundo rango aparezca 0 veces o una vez.


*

Cero o más veces.

Si cambiamos por un * aparecera 0 veces o más veces por lo tanto mostrara todos los números.

$ grep -E "^[0-9][0-9]*$" numeros.txt

1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765

Podemos decir que los primeros números sean del 0 al 9 y los segundos del 0 al 5 por ejemplo. Eso excluirá los 2°, 3° y 4° dígito superior a 5 ...

$ grep -E "^[0-9][0-5]*$" numeros.txt

1
1
2
3
5
8
13
21
34
55
144
233
610

+

Una o más veces.

Esto hará que saque el dato por lo menos una vez.

$ grep -E "^[0-9][0-5]+$" numeros.txt

13
21
34
55
144
233
610

Estamos forzando a que tenga mínimo 2 dígitos.


{n}

Determinar el número exacto de veces que deseamos que se repita el rango.

$ grep -E "^[0-9]{3}$" numeros.txt

144
233
377
610
987

{n,m}

Especificamos un rango de veces. Por ejemplo los números que contengan 2 a 4 veces.

$ grep -E "^[0-9]{2,4}$" numeros.txt

13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765

{n,}

Mostrará n veces o más el rango especificado.

Por ejemplo los números con 3 a más dígitos.

$ grep -E "^[0-9]{3,}$" numeros.txt

144
233
377
610
987
1597
2584
4181
6765

( )

Agrupar expresiones.

Si queremos los números de 1 dígito y los de 3 dígitos, podemos usar dos expresiones regulares dentro de grep con la opción -e por ejemplo...

$ grep -E -e "^[0-9][0-9][0-9]$" -e "^[0-9]$" numeros.txt

1
1
2
3
5
8
144
233
377
610
987

Pero podemos agrupar ésta opción ...

$ grep -E  "^[0-9]([0-9][0-9])?$" numeros.txt

1
1
2
3
5
8
144
233
377
610
987

|

Es un pipe (tubería) y determina que es opcional de tal forma que la anterior expresión regular la podemos expresar de la siguiente manera...

$ grep -E  "^([0-9]|[0-9][0-9])$" numeros.txt

1
1
2
3
5
8
13
21
34
55
89

El resultado será el mismo en este caso.

Reducir

En el último caso podríamos reducir la expresión de esta forma...

$ grep -E  "^([0-9]|[0-9]{2})$" numeros.txt

1
1
2
3
5
8
13
21
34
55
89

Obtenemos el mismo resultado con menos código.

results matching ""

    No results matching ""