Vous êtes sur la page 1sur 14

Guía 3: Script-Shell

Carlos Geovanny Escobar Portillo

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:

$ grep [opciones] [expresión regular] [archivo]

SED

SED (Stream EDitor) es un editor de flujos y ficheros de forma no interactiva. Permite


modificar el contenido de las diferentes líneas de un fichero en base a una serie de comandos
o un fichero de comandos (-f fichero_comandos).

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.

El formato básico de uso de sed es:

# sed [-ns] '[dirección] instrucción argumentos'

Donde:

● [dirección] es opcional, siendo un número de línea (N), rango de números de línea


(N,M) o búsqueda de regexp (/cadena/) indicando el ámbito de actuación de las
instrucciones. Si no se especifica [dirección], se actúa sobre todas las líneas del
flujo.
● Instrucción puede ser:
○ i = Insertar línea antes de la línea actual.
○ a = Insertar línea después de la línea actual.
○ c = Cambiar línea actual.
○ d = Borrar línea actual.
○ p = Imprimir línea actual en stdout.
○ s = Sustituir cadena en línea actual.
○ r fichero = Añadir contenido de "fichero" a la línea actual.
○ w fichero = Escribir salida a un fichero.
○ ! = Aplicar instrucción a las líneas no seleccionadas por la condición.
○ q = Finalizar procesamiento del fichero.
● -n: No mostrar por stdout las líneas que están siendo procesadas.
● -s: Tratar todos los ficheros entrantes como flujos separados.

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.

Obtenemos las líneas

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.

Mostramos las líneas:

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

Hacemos el conteo de 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.

Contamos las líneas:

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.

37) Se ha creado un script donde se coloco los siguientes comandos:


clear
echo “Estamos ejecutando un script”
Y se guardo en un archivo script.sh se le dio permisos de ejecucion con chmod 755 y se
ejecuto con ./script.sh.

El resultado fue que limpio la pantalla y mostró un mensaje: “estamos ejecutando un script”.

38) Crearemos un archivo de nombre vuelca_datos.sh donde escriberemos esta linea de


comando: echo "Mi nombre es Geovanny y estamos en clases de SI", cambiamos los
permisos con chmod 755 y ejecutamos el script ./vuelca_datos.sh.
El resultado es que el mensaje se muestra en pantalla.

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.

40) Vamos a crear un archivo mayor_que_cero.sh y agregamos el siguiente script:

if test $1 -gt 0
then
echo "$1 number is positive"
fi

El resultado es que cuando es número positivo muestra un mensaje y si es negativo no


muestra nada.

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

Vous aimerez peut-être aussi