Académique Documents
Professionnel Documents
Culture Documents
GREP
grep es una utilidad de la línea de comandos escrita originalmente para ser usada con el
sistema operativo Unix.
Usualmente, grep toma una expresión regular de la línea de comandos, lee la entrada
estándar o una lista de archivos, e imprime las líneas que contengan coincidencias para la
expresión regular.
Su nombre deriva de un comando en el editor de texto ed que tiene la siguiente forma: g/re/p
y significa «hacer una búsqueda global para las líneas que encajen con la expresión regular
(regular expression en inglés), e imprimirlas». Hay varios argumentos que se pueden usar
con grep para modificar el comportamiento por defecto.
Existen otros retroacrónimos (incorrectos) para el nombre, entre ellos: General Regular
Expression Parser (analizador general de expresiones regulares), General Regular
Expression Print (imprimir expresión regular general), y Global Regular Expression Print
(imprimir expresión regular global), este último no tan lejano de la realidad.
Sintaxis:
SED
Sed recibe por stdin (o vía fichero) una serie de líneas para manipular, y aplica a cada una
de ellas los comandos que le especifiquemos a todas ellas, a un rango de las mismas, o a las
que cumplan alguna condición.
Donde:
Expresiones Regulares
Una expresión regular, también conocida como regex, regexp1 y a menudo llamada una
expresión racional,2 3 es, en la ciencia computacional teórica y la teoría de lenguaje formal,
una secuencia de caracteres que forma un patrón de búsqueda, principalmente utilizada para
la búsqueda de patrones de cadenas de caracteres u operaciones de sustituciones. Por
ejemplo, el grupo formado por las cadenas Handel, Händel y Haendel se describe con el
patrón "H(a|ä|ae)ndel". La mayoría de las formalizaciones proporcionan los siguientes
constructores: una expresión regular es una forma de representar los lenguajes regulares
(finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el
lenguaje.
En informática, las expresiones regulares proporcionan una manera muy flexible de buscar o
reconocer cadenas de texto.
Por tanto, un buen manejo de las expresiones regulares nos va a permitir hacer búsquedas
de forma más rápida o precisa.
DESARROLLO GUIA 3
1)A partir de la información que has leído en las páginas anteriores sobre expresiones
regulares y de la tabla facilitada, trata de completar los ejercicios sobre grep que puedes
encontrar en http://lem.eui.upm.es/tgrep.html.
2) En archivo historia vamos a obtener las líneas que tienen la palabra españa y después
vamos a contar en cuantas líneas aparece, usaremos el comando wc para realizar el conteo
y mostrarlo en pantalla.
Mostramos las lineas:
Realizamos el conteo:
3) Desde el archivo historia filtraremos las líneas que tenga la palabra España y guerra,
después contaremos cuantas líneas devuelve.
realizamos el conteo
4) Desde el archivo historia recuperemos las líneas que tenga primero la palabra guerra y
después la palabra españa.
Realizamos el conteo:
5) Ahora vamos a filtrar las líneas donde aparezca la palabra Francia e Italia utilizaremos el
comando egrep que expande la funcionalidades del grep normal. Para poder hacer el filtro
se utilizará una sentencia ‘Francia|Italia’ donde | se usa como operador lógico or
Mostramos las líneas
6)Mostraremos las líneas que contengan guerra y España no importando el orden que
aparezcan, para eso usaremos egrep con la siguiente expresión egrep
“guerra.*España.*|España.*guerra.*” historia
Usando la .* decimos que use cualquier carácter que esté después de la palabra indicada y
usamos | para decir que use tambien el otro orden de la palabras.
7) Obtendremos la líneas que tengas la palabra guerra usando grep guerra historia y después
usaremos este resultado como entrada para el comando grep -v España que quitara todas
las líneas que tienen Español.
8) Vamos a extraer solo los las palabras con 5 letras que terminan en ía, para eso utilizaremos
una opción del grep -w [...ía] con la -w se crea un patrón de búsqueda y con la [...ía] indicamos
que el patrón son las cadenas que tengan 5 letras y terminan en ía.
9) Contaremos las líneas que resulta de filtrar las líneas que tenga una cadena de 4 números.
Usaremos grep y la opción -E para indicar que usaremos una expresión regular '([0-9]{4})'
donde [0-9] indica un rango de número y {4} dice que la cadena sea 4 caracteres. Por último
contaremos las líneas con wc -l.
10) Para contar las líneas que comienzan con la letra “a” se usa el carácter “ ̂” que indica el
inicio de una línea.
11)Para contar las líneas que terminan con la letra “s” se usa el carácter “$” con la que se
indica el final de la línea.
12) Para contar las líneas que comienzan con la letra “la” se usa el carácter “ ̂” que indica
el inicio de una línea.
13) Para contar las líneas que terminan con la letra “as” se usa el carácter “$” con la que se
indica el final de la línea.
14) Para indicar que una línea inicia con “s” y termina “s” usaremos una combinación de los
caracteres “̂ y $.
15) Mostraremos cuantas líneas comienza con a (no importa si son mayusculas o minusculas)
y las que terminan con s (no importa si son mayusculas o minusculas).
Al comando grep le agregamos la opción -i donde indica que ignore las mayúsculas y
minúsculas. Filtramos la líneas que comienzan con a y después de esta entrada filtramos las
que termina en s, completamos el comando con wc -l y contamos las líneas.
16) Para obtener las líneas que tengas fechas 1900 a 1999, se usará [[:digit:]] que significa
un patrón de rango de 0-9. El grep se usará con la opción -E para que lea las expresiones
extendidas.
17) Vamos a indicar que nos devuelva la cantidad de líneas que tengan alguna palabra de 15
letras. Para este ejemplo usaremos el patrón [:alpha:] equivalente a [a-zA-Z] que indica que
las palabra son un rango de caracteres, el {15} indica que la patrón es de 15 espacios, \b al
inicio y al final y indica que sigue otra palabra.
18) Mostraremos el número de palabras que tienen la letra “y”. Esta vez en ves de usar wc -
l, usaremos la opción de grep -c que no devuelve la suma de ocurrencias que se han
encontrado.
19) Vamos a buscar las líneas que contengan la palabra “y” y que comiencen al comienzo y
al final. Usaremos la expresión regular extendida grep -E y los comodinos para decir que
todas las líneas que inician con “y” ^y o terminen en “y” y$.
20) Muestre las líneas que contengan las letra “y” en una palabra de más de una letra. para
esto usaremos [[:alpha:]] para indicar que antes y después de la letra “y” debe haber otra
letra.
21) Comenzaremos a usar el comando sed que es parecida a grep, pero con la diferencia
que no solo muestra resultados, también es capaz de ingresar y modificar contenido a un
archivo. Para este ejercicio vamos a extraer las primeras 8 líneas que hay en el archivo
historia utilizando sed y la opción -n que evita mostrar texto duplicado.
22) Mostramos las 20 líneas del archivo historia y las guardamos en un archivo llamado
fichero. usaremos el comando sed y con > lo enviaremos al fichero.
23) Mostramos el contenido del archivo usando sed -n "p" fichero. Donde -n evita que se
muestre texto duplicado y “p” ordena a que se muestre las líneas.
24) Mostramos una las líneas donde aparece la palabra España. El comando a usar es sed -
n "/España/p" fichero | wc -l el resultado es 4 líneas.
25) Borraremos las líneas 5 a la 10 del archivo fichero, el comando a usar es sed -i "5,10d"
fichero donde -i indica que guardaremos los cambios en el mismo archivo, el intervalo 5,10
son las líneas a borrar y d que indica que se eliminaran las líneas.
26) Borremos las líneas en blanco del archivo fichero y mostraremos el resultado para eso
vamos a usar el comando sed '/^$/d' para indicar que eliminan los espacios en blanco.
27) Usaremos send para borrar todas las líneas que tenga la cadena “en”. Las cadenas de
carácter para borrar deben esta en cerrada en “/”
28) Borrar dos cadenas como “en” y “el” usamos expresiones regulares. el comando se utiliza
la opción -e para identificar las expresiones regulares.
29) Para borrar las palabras de cada la primera palabra de cada línea se usará una expresión
regular que sustituya la letra por un espacio en blanco sed “s/^[[:alpha:]]*\b//g” fichero donde
s/ indica sustituir, inicio de línea(^) la letra([[:alpha:]]) por espacio vacío(//) en todas las
líneas(g).
30)Siguiendo el ejemplo anterior vamos a cambiar la letra a por @ pero solo la primera
aparición de cada línea. En la expresión regular usamos s/ para sustituir, a/ letra que vamos
a buscar, @/ letra sustituta y 1 que indica la primera ocurrencia.
31) Usaremos el ejercicio anterior pero cambiaremos el 1 (numero de ocurrencia) por g que
indica toda las apariciones o ocurrencias.
32) Cambiaremos todas la apariciones de la palabra Espana por Spain siempre usando el
comando anterior.
33) Reemplazamos las vocales minúsculas por mayúsculas utilizando sed con expresiones
regulares. La expresión regular estará conformada por s/ que indica sustitución, por /[aeiou]/
que indica que el patrón son todas las vocales listadas, \u&/ esta expresión indica mayúsculas
y g que haga la sustitución en todas las ocurrencias.
34) Eliminaremos todas las ocurrencias donde aparece la letra e. En el caso de sed no se
elimina, sino que se va reemplazar por espacios vacíos.
35) Eliminar todas las vocales, con o sin acento, mayúsculas y minúsculas. Utilizaremos la
siguiente expresión para sustituir las vocales por espacios vacíos
s/[aeiouAEIOUáéíóúÁÉÍÓÚ]//g. Donde s/ indica sustitución, [aeiouAEIOUáéíóúÁÉÍÓÚ] es
el patrón que vamos a sustituir.
36) Eliminar todos los espacios en blanco. Usamos s/ dejando un espacio antes de //g, con
esto se sustituirán los espacios en blanco.
El resultado fue que limpio la pantalla y mostró un mensaje: “estamos ejecutando un script”.
39) En los script de shell también se puede usar variable y capturar la entrada del teclado.
Crearemos un script para que muestre el nombre que escriba, la guarde en una variable y
se imprima junto con un mensaje.
Como vemos el comando read lee la entrada estándar y los guarda en una variable fname
y esta es mostrada con echo en la pantalla usando $fname.
if test $1 -gt 0
then
echo "$1 number is positive"
fi
Vamos hacer que muestre un mensaje cuando el número sea negativo. Para eso vamos a
incorporar else a nuestro código:
if test $1 -gt 0
then
echo "$1 numero positivo"
else
echo "$1 numero negativo"
fi