Está en la página 1de 53

ADMINISTRACIÓN DE SISTEMAS

Interacción y programación para la


administración de sistemas: Estándar
IEEE std 1003.1 (Posix): shell y
herramientas
Herramientas
ÍNDICE
¢ Comandos simples

8/5/18
¢ Comando find

Administración de Sistemas
¢ Expresiones regulares

¢ La familia grep

¢ El editor de línea ed

¢ Filtros de manipulación compleja: sed, awk

2
INTRODUCCIÓN
¢ Gran parte de las tareas de administración

8/5/18
requieren la manipulación de ficheros de texto:

Administración de Sistemas
— Cuentas de usuario: /etc/passwd …
— Configuración del sistema: /etc/fstab …
— Configuración de servicios: /etc/ssh/sshd_config …
— …
¢ Cuanto mas experto se es en el uso de las
herramientas, mas fácil resulta escribir scripts
para realizar tareas de administración.
— Es mucho mas eficiente usar estas herramientas que
sustituir su funcionalidad mediante un algoritmo ad-
hoc en un script 3
COMANDOS SIMPLES PARA
PROCESAMIENTO DE TEXTO
¢ Existe una serie de comandos simples para realizar

8/5/18
operaciones concretas sobre ficheros de texto
— Ordena las líneas alfabéticamente: sort

Administración de Sistemas
— Escribe partes seleccionadas de un fichero a la salida estándar: cut
— Une texto de varios ficheros: paste
— Borra y/o reemplaza caracteres: tr
— Elimina líneas repetidas: uniq
— Muestra el número de líneas, palabras y bytes de un fichero: wc
— Formatea párrafos: fmt
— Combina varios ficheros: join
— Divide un fichero en ficheros mas pequeños: split
— Muestra el principio/final de un fichero: head, tail
— Muestra el fichero al revés: tac, rev
— Añade números de línea: nl
— Convierte TABs en espacios: expand
— Muestra un fichero en diferentes formatos: od 4
COMANDOS SIMPLES PARA
PROCESAMIENTO DE TEXTO

¢ También se conocen como filtros: obtienen su

8/5/18
entrada de la entrada estándar (o un fichero) y
envían la salida a la salida estándar:

Administración de Sistemas
¢ sort < archivo.txt | head -3 > otro_archivo.txt
¢ Casi todos estos comandos tienen, entre otras
opciones, las siguientes dos:
— --help muestra una pequeña ayuda
— --version muestra la versión del comando
¢ Imprescindible el uso del manual man

5
COMANDOS SIMPLES: SORT
¢ Ordena alfabéticamente líneas de texto y las

8/5/18
muestra en la salida estándar
¢ Formato:

Administración de Sistemas
sort [opciones] fichero
¢ Algunas opciones:
— -b ignora blancos al principio de línea
— -f no distingue mayúsculas/minúsculas
— -r orden inverso
— -n ordena numéricamente
— -k POS1[, POS2] ordena según los campos desde POS1 o
POS2, o el final si no está POS2 (el primer campo es 1)
— -t char establece el carácter separador entre campos (por
defecto el blanco) 6
COMANDOS SIMPLES: SORT
$> cat nombres.txt

8/5/18
Maria Perez
luis Andion

Administración de Sistemas
Adriana Gomez
jorge pena
$> sort nombres.txt
Adriana Gomez
Maroa Perez
jorge pena
luis Andion

7
COMANDOS SIMPLES: SORT
$> sort -f nombres.txt

8/5/18
Adriana Gomez
jorge pena

Administración de Sistemas
luis Andion
Maria Perez
$> sort -f -k 2,2 nombres.txt
luis Andion
Adriana Gomez
jorge pena
Maria Perez

8
COMANDOS SIMPLES: CUT
¢ Escribe partes seleccionadas de un fichero a la

8/5/18
salida estándar; puede usarse para seleccionar
columnas o campos de un fichero específico

Administración de Sistemas
¢ Formato:

cut [opciones] fichero


¢ Algunas opciones:
— -b, -c, -f corta por bytes, caracteres o campos,
respectivamente
— -d fija el carácter delimitador entre campos (por
defecto, TAB)

9
COMANDOS SIMPLES: CUT
$> cat nombres-ord.txt

8/5/18
Luis Andion
Adriana Gomez
Jorge Pena

Administración de Sistemas
Maria Perez
$> cut -c 1-7 nombres-ord.txt
Luis An
Adriana
Jorge P
Maria P
$> cut -c 1-5,9-10 nombres-ord.txt
Luis io
AdriaGo
Jorgena
Mariare
$> cut -d ´ ´ -f 1 nombres-ord.txt
Luis
Adriana
Jorge 10
Maria
COMANDOS SIMPLES: WC
¢ Muestra el número de líneas, palabras y bytes de

8/5/18
un fichero

Administración de Sistemas
¢ Formato:

wc [opciones] fichero
¢ Algunas opciones:
— -l muestra solo el número de líneas
— -w muestra solo el número de palabras
— -c muestra solo el número de bytes
— -L muestra la longitud de la línea mas larga

11
COMANDOS SIMPLES: WC
$> wc quijote.txt

8/5/18
5 33 178 quijote.txt

Administración de Sistemas
$> wc -l quijote.txt
5 quijote.txt
$> wc -w quijote.txt
33 quijote.txt
$> wc -c quijote.txt
178 quijote.txt

12
COMANDOS SIMPLES: PASTE
¢ Permite unir texto de varios ficheros, uniendo las

8/5/18
líneas de cada uno de los ficheros

Administración de Sistemas
¢ Formato:
paste [opciones] fichero1 [fichero2] . . .
¢ Algunas opciones:
— -s pega los ficheros secuencialmente, en vez de
intercalarlos
— -d especifica los caracteres delimitadores en la salida
(por defecto, TAB)

13
COMANDOS SIMPLES: PASTE
$> cat nombres.txt

8/5/18
Luis
Adriana
Jorge
Maria

Administración de Sistemas
$> cat apellidos.txt
Andion
Gomez
Pena
Perez
$> paste nombres.txt apellidos.txt
Luis Andion
Adriana Gomez
Jorge Pena
Maria Perez
$> paste -d ´ ´ nombres.txt apellidos.txt
Luis Andion
Adriana Gomez
Jorge Pena
Maria Perez
$> paste -s -d ´\t\n´ nombres.txt
Luis Adriana
Jorge Maria 14
COMANDOS SIMPLES: TR
¢ Borra caracteres o reemplaza unos por otros

8/5/18
¢ Formato:

Administración de Sistemas
tr [opciones] set1 set2
¢ Algunas opciones:
— -d borra los caracteres especificados en set1
— -s reemplaza caracteres repetidos por un único
carácter

15
COMANDOS SIMPLES: TR
$> tr ´a-z´ ´A-Z´ < quijote.txt

8/5/18
EN UN LUGAR DE LA MANCHA, DE CUYO NOMBRE...

Administración de Sistemas
$> tr -d ´ ´ < quijote.txt
EnunlugardelaMancha,decuyonombre...
$> tr au pk < quijote.txt
En kn lkgpr de lp Mpnchp, de ckyo nombre...
$> tr lcu o < quijote.txt | tr -s o
En on ogar de oa Manoha, de oyo nombre

16
COMANDOS SIMPLES: UNIQ
¢ Descarta todas (menos una) las líneas idénticas

8/5/18
sucesivas en el fichero
¢ Formato:

Administración de Sistemas
uniq [opciones] fichero
¢ Algunas opciones:
— -d muestra las líneas duplicadas (sin borrar)
— -u muestra solo las líneas sin duplicación
— -i ignora mayúsculas/minúsculas al comparar
— -c muestra el número de ocurrencias de cada línea
— -s n no compara los n primeros caracteres
— -f n no compara los n primeros campos
— -t c usa el carácter c como separador de campos (por
17
defecto, espacio o tabulado)
COMANDOS SIMPLES: UNIQ
$> cat nombres.txt

8/5/18
Julio Lorenzo
Pedro Andion
Celia Fernandez

Administración de Sistemas
Celia Fernandez
Juan Fernandez
Enrique Pena
$> uniq nombres.txt
Julio Lorenzo
Pedro Andion
Celia Fernandez
Juan Fernandez
Enrique Pena
$> uniq -f 1 -c nombres.txt
1 Julio Lorenzo
1 Pedro Andion
3 Celia Fernandez
1 Enrique Pena 18
COMANDO FIND
¢ Algunas tareas de administración que necesitan búsqueda

8/5/18
de ficheros:
— Asegurarse de que no haya ficheros demasiado grandes.

Administración de Sistemas
— Asegurarse que ningún usuario utilice demasiado espacio de
disco.
— Buscar donde está un determinado fichero.
— Borrar los ficheros que pertenecen a un usuario en particular.
— Visualizar los nombres de todos los ficheros modificados en los
últimos dos días…
¢ find [lista-directorios-búsqueda] [expresión]
— Expresión : [opciones][tests][acciones][operadores]
¢ opciones : modifican la forma de operar de find.
¢ tests : condiciones de búsqueda a verificar por los ficheros a extraer.
¢ acciones : operaciones a realizar en los ficheros encontrados.
¢ operadores : agrupar expresiones.
— Expresión por defecto : -print (acción de visualización) 19
COMANDO FIND
¢ Opciones :

8/5/18
— -daystart : para tests usando tiempo tomarlo desde el día actual.
— -depth : procesar contenido de directorio antes de directorio.
— -maxdepth numero : máximo de directorios a descender (positivo).

Administración de Sistemas
— -mindepth numero : a que nivel empezar los tests.
— -xdev : no buscar en otras particiones.
¢ Tests :
¢ -amin n1 -cmin n2 -mmin n3
— [último acceso | cambio estado | datos modificados] del fichero hace n1, n2, n3
minutos.
¢ -atime n1 -ctime n2 -mtime n3
— lo mismo que el anterior pero n1, n2 y n3 son días.
¢ -name patrón_fichero -iname patrón_fichero -regex ER
— Sensible/insensible a mayúsculas, expresiones regulares
¢ -perm modo
— los permisos del fichero concuerdan con modo
¢ -size n[bck]
— el fichero utiliza n unidades (b=bloques, c=bytes, k=kbytes) de espacio
¢ -user nombre -uid n -gid n -type c ........
¢ los valores numéricos pueden especificarse, también, con +n y -n. 20
COMANDO FIND
¢ Acciones :

8/5/18
— Ejecutar comandos sobre los ficheros :
-exec comando ; ejecuta sin preguntar

Administración de Sistemas
¢

¢ -ok comando ; pregunta antes de ejecutar


¢ en comando se utiliza {} para referirse al fichero encontrado
por find.
— Visualización diversa de información sobre el fichero :
mirar man.
¢ Ejemplos :
— find - maxdep 2
— find . -user david
— find /home -size +2500k -mtimes -7
— find . -exec grep hola \{\} \;
21
— find / -iname \*.bak -ok rm \{\} \;
EXPRESIONES REGULARES
¢ La expresiones regulares se usan en varios

8/5/18
comandos Unix, como: ed, sed, awk, grep, vi.

Administración de Sistemas
¢ Permiten especificar de forma conveniente y
consistente patrones a cumplir.
¢ El shell reconoce una forma muy limitada de
expresiones regulares, empleadas para la
sustitución de nombres de ficheros (los
“comodines”).
¢ La que vamos a ver en este capítulo es diferente:

22
EXPRESIONES REGULARES
¢ Diferentes categorías de expresiones regulares:

8/5/18
— Expresiones regulares básicas.
Expresiones regulares extendidas.

Administración de Sistemas
—
— Extensiones específicas a comandos.
¢ UNIX admite dos tipos de expresiones regulares:
básicas y extendidas
— las básicas son las clásicas de UNIX, aunque se
consideran obsoletas en POSIX
— aplicaciones como grep o sed las usan por defecto
— para usar las extendidas:
¢ grep → egrep o grep -E
¢ sed → sed -r

— las expresiones extendidas proporcionan mas 23


potencia
EXPRESIONES REGULARES BÁSICAS
¢ La mayoría de los caracteres son tratados como

8/5/18
literales:

Administración de Sistemas
— concuerdan (match) consigo mismos:
— a concuerda con a, ab con ab, etc.
¢ la excepción son los metacaracteres:
— .[]^$*()\

24
EXPRESIONES REGULARES BÁSICAS

8/5/18
Administración de Sistemas
¢ Dentro de [ ] los metacaracteres pierden su significado
especial: p.e. [a.]c concuerda con ac y .c
¢ Para incluir un carácter ] en una lista colocarlo al principio;
para incluir un ^ en cualquier lugar menos al principio;
25
para incluir un - al final: p.e. [a^]c concuerda con ac y ^c
EXPRESIONES REGULARES BÁSICAS
¢ Ejemplos

8/5/18
Administración de Sistemas
26
EXPRESIONES REGULARES BÁSICAS
¢ Repetición:

8/5/18
Administración de Sistemas
¢ Ejemplos:
— a\{5\} : 5 ocurrencias del carácter a
— .\{5,\} : al menos 5 ocurrencias de cualquier carácter

27
EXPRESIONES REGULARES
¢ Registros: almacenar caracteres en registros

8/5/18
¢ Los patrones son capturados entre \( y \)

Administración de Sistemas
Ejemplo : \(abc\)
¢ Y los registros representados por :
— \1 : primer registro-primera captura :
\(accc\)\1 filtra acccaccc
— \2 : segundo registro-segunda captura.... :
\(a\)\(b\)\1\2 filtra abab
¢ Ejemplos:
— \(pedro\)\1 : pedropedro
— \(.\)aa\1 : baab caac daad eaae...
28
EXPRESIONES REGULARES EXTENDIDAS
¢ Los sistemas UNIX actuales admiten extensiones

8/5/18
a las expresiones regulares básicas:

Administración de Sistemas
— debemos usar egrep, grep -E, sed -r

¢ Además, \( \) y \{ \} se reemplazan por ( ) y { }


¢ Ejemplos:

— ab+c concuerda con abc, abbc, pero no con ac


— ab?c concuerda con ac, abc, pero no con abbc
¢ Para usar los caracteres (, ), { o } escaparlos con \ 29
EXPRESIONES REGULARES EXTENDIDAS
¢ Alternancia

8/5/18
— El carácter | permite alternar entre 2 o mas RE

Administración de Sistemas
¢ (a|b)c concuerda con ac o bc
¢ Registros
— Las RE que se ponen entre ( ) quedan etiquetadas, y
podemos hacer referencia a esos elementos mediante
\n, con n el número de la etiqueta
— Ejemplos:
¢ (.)oo\1 concuerda con moom, noon, pero no con moon
¢ (.)oo\1-(.)aa\1\2 concuerda con moom-paamp

30
EXPRESIONES REGULARES EXTENDIDAS
¢ Además de los ya vistos, pueden usarse otros

8/5/18
metacaracteres:

Administración de Sistemas
¢ [[:upper:]]bc concuerda con Abc, pero no abc
¢ \babc\b concuerda con ab abc df, pero no con abcdef 31
¢ \Babc\B concuerda con ababcdf, pero no con ab abc df
EXPRESIONES REGULARES EXTENDIDAS
\w+@\w+\.\w+(\.\w+)*

8/5/18
¢
— concuerda con direcciones de e-mail

Administración de Sistemas
¢ (0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-(19|20)[0-9]{2}
— concuerda con fechas en el formato dd-mm-yyyy (años entre
el 1900 y 2099)

¢ [-+]?([0-9]*\.)?[0-9]+([eE][-+]?[0-9]+)?
— concuerda con números en punto flotante (con o sin
exponente)

32
LA FAMILIA GREP
¢ Búsqueda, en un fichero (o más), de líneas que

8/5/18
contienen un determinado patrón de caracteres:

Administración de Sistemas
grep [opciones] ER [ficheros...]
¢ Algunas opciones:
— -c : numero de líneas capturadas.
— -l : visualizar solo nombres de ficheros con líneas
capturadas.
— -v : extraer todas las líneas menos las que
correspondan a ER.
— -E : usa expresiones regulares extendidas
¢ Si no se especifica fichero, se usa la entrada
estándar. 33
LA FAMILIA GREP
¢ Ejemplos:

8/5/18
— grep ‘[Uu]nix’ tmp.doc

Administración de Sistemas
— grep ‘hol.’ tmp.doc
— grep ‘A[a-z]’ /usr/dict/words
— grep ‘AA.*e$’ tmp.doc
— grep ‘[^aeiouAEIOU]*’ tmp.doc
— grep ‘.\{2,\}’
— grep ‘\(su\)\1’ tmp.doc

34
LA FAMILIA GREP
¢ Búsqueda con Expresiones regulares extendidas :

8/5/18
egrep [opcione(s)] [-f ficheroER] ER [ficheros...]

Administración de Sistemas
¢ La opción -f toma las expresiones regulares (una
por línea) de ficheroER. Equivalente a usar
fgrep.
¢ Ejemplos :
— egrep -f match ejemplo
— egrep ‘usuario|password|uid’ ejemplo
— egrep ‘B[in]|b[in]’ ejemplo
— egrep ‘(fin)+’ ejemplo
35
LA FAMILIA GREP
¢ Importante: no se deben confundir las expresiones regulares con la

8/5/18
sustitución de nombres de ficheros

egrep ‘t[^aeiouAEIOU][a-zA-Z]*’ tmp.txt

Administración de Sistemas
localiza las cadenas que empiecen por t, seguido de algún carácter no vocálico
y cero o mas apariciones de otro carácter

¢ Sin comillas simples:

egrep t[^aeiouAEIOU][a-zA-Z]* tmp.txt

— la shell extiende los comodines y convierte este comando en:

egrep tmp.txt tmp.txt

¢ Para evitar esto, siempre usar comillas con las expresiones regulares
36
EL EDITOR DE LÍNEA ED
¢ Interés de conocer el editor de línea Ed :

8/5/18
— sus comandos, que también utilizan expresiones regulares,
son utilizados en vi, sed, awk y otras herramientas de

Administración de Sistemas
manipulación de flujos de caracteres.
— Ciertas circunstancias en que su uso es obligatorio para un
administrador como cuando únicamente se tiene el sistema
mínimo en caso de problemas.
¢ Formato de los comandos de ed :
— [ nº de línea [, nº de línea]] comando [parámetros]
¢ líneas sobre las cuales se efectúa el comando

¢ un comando compuesto por un solo carácter

¢ un parámetro opcional dependiendo del comando

¢ Vi reconoce los mismos comandos cuando se accede a


37
su línea de comandos (comienza por :).
EL COMANDO SED (EDITOR DE FLUJO)
¢ Versión no interactiva de ed. Permite realizar

8/5/18
transformaciones básicas de un flujo de entrada (fichero
o entrada desde un pipe)

Administración de Sistemas
¢ Invocación:
— sed OPCIONES… SCRIPT [lista_ficheros]
— sed [-e SCRIPT] [-f fichero_scripts] [lista_ficheros]
¢ Un script de sed es un conjunto de 1 o más comandos de
sed
¢ Cada comando está compuesto de hasta 2 direcciones
(número de línea o expresión regular) y una acción
¢ Sintaxis comando:
[addr]X[options], X es una acción/comando
38
¢ Ejemplo: borrar lineas de la 27 a la 31 en un fichero:
sed ‘27,31d’ entrada.txt > salida.txt
CONTROL DE FLUJO EN SED
¢ Para cada línea del fichero de entrada, sed lee el 1er

8/5/18
comando del scrips y e intenta emparejar la línea con
la dirección:

Administración de Sistemas
— Si hay acierto, el comando se ejecuta
— Sino, el comando se ignora
— Después se repite para todos los comandos del fichero
¢ Al llegar al final del script, se muestra el resultado de
la línea salvo que –n esté activo

39

fuente: https://cs.nyu.edu/~mohri/unix08/lect5.pdf
SUSTITUCIONES EN SED
¢ Formato (para sustituciones):

8/5/18
— sed [opciones] s/REGEXP /reemplazo/flag [fichero]

Administración de Sistemas
¢ Ejemplos comando sustitución:
— Cambiar el nombre de usuario PEPE en /etc/passwd
por pepe :
¢ sed 's/PEPE/david/' /etc/passwd
— Modificar el login shell a csh a todos los usuarios que
están usando bash.
¢ sed 's/\/bin\/bash/\/bin\/csh/’ /etc/passwd

40
OTROS COMMANDOS EN SED
¢ d borrado

8/5/18
¢ i\, a\, añade antes/después de la línea afectada:

Administración de Sistemas
— seq 3 | sed '2i hola'
— echo "hola, qué tal" | sed '1aBien'
¢ c\ reemplaza la línea afectada
— seq 10 | sed -e '2,9c hola'
¢ Algunas opciones:
— -r : expresiones regulares extendidas
— -e comando : añade comando
— -i : edita el fichero in-place
— -n : suprime la salida 41
EL COMANDO SED (EDITOR DE FLUJO)
¢ Algunos flags:

8/5/18
— g: aplica los cambios globalmente (por defecto, solo se
cambia la primera aparición en cada línea)

Administración de Sistemas
— p imprime las líneas afectadas, incluso con la opción -
n.
— NUMERO : reemplaza la aparición número NUMERO
— w fichero: escribe las líneas con sustituciones al fichero
indicado

42
EL COMANDO SED (EDITOR DE FLUJO)
¢ Ejemplo: cambia, en el fichero amigos, todas las

8/5/18
apariciones de pepe y paco por Pepe y Paco,
respectivamente:

Administración de Sistemas
$> sed -e ´s/pepe/Pepe/g´ -e ´s/paco/Paco/g´ amigos
(también sed ´s/pepe/Pepe/g ; s/paco/Paco/g´ amigos)
¢ Ejemplo: cambia pepe por Pepe, pero solo en las
líneas que tengan Potamo
$> sed ´/Potamo/s/pepe/Pepe/g´ amigos
¢ Ejemplo: muestra solo las líneas que contengan
jaime
$> sed -n ´/jaime/p´ amigos
43
EL COMANDO SED (EDITOR DE FLUJO)
¢ Ejemplo: borra las líneas que contengan jaime

8/5/18
$> sed ´/jaime/d´ amigos
¢ Ejemplo: cambia las líneas que contengan jaime por

Administración de Sistemas
otra cosa
$> sed ´/jaime/c\BORRADO´ amigos
¢ Ejemplo: inserta una línea antes de las líneas que
contengan jaime por otra cosa
$> sed ´/jaime/i\APARICION´ amigos
¢ Ejemplo: reemplaza, en cada línea de fichero, la
quinta ocurrencia de stop por STOP
$> sed ´s/stop/STOP/5´ fichero
¢ Ejemplo: igual que antes pero guarda cada línea
reemplazada en el fichero f2
44
$> sed ´s/stop/STOP/5w f2´ fichero
EL COMANDO SED (EDITOR DE FLUJO)
¢ Indicación de líneas: podemos especificar las

8/5/18
líneas del fichero en las que queremos que se
realicen las operaciones:

Administración de Sistemas
— sed ´3s/stop/STOP/g´ (reemplaza solo en la línea 3)
sed ´3,10s/stop/STOP/g´ (reemplaza de la línea 3 a la
10)
— sed ´3,$s/stop/STOP/g´ (reemplaza de la línea 3 al
final)
— sed ´!3s/stop/STOP/g´ (reemplaza en todas las líneas
menos la 3)
¢ Operador &: se sustituye por el patrón
reconocido
— Ejemplo: reemplaza stop por <stop>
45
— $ sed ´3s/stop/<&>/g´ fichero
EL COMANDO SED (EDITOR DE FLUJO)
$> echo "abc1234def" | sed -r "s/[0-9]+/NUMERO/"

8/5/18
abcNUMEROdef
$> echo "abc1234def" | sed -r ´s/[0-9]+/<&>/´

Administración de Sistemas
abc<1234>def
# En el siguiente ejemplo, notar que las ER
intentan siempre reconocer la secuencia mas
larga posible
$> echo "000x111x222x333" | sed ´s/x.*x/<&>/´
000<x111x222x>333

46
EL COMANDO SED (EDITOR DE FLUJO)
# Eliminar blancos a principio y al final de línea

8/5/18
y sustituir mas de un blanco seguido por uno solo
$ sed -r "s/^ +// ; s/ +$// ; s/ +/ /g" fich

Administración de Sistemas
# Poner los 4 primeros caracteres de cada línea al final de la
misma
$ sed -r ´s/^(.{4,4})(.*)/\2\1/´ fich
# Cambia de minúsculas a mayúsculas la primera letra de cada
palabra
$ sed -r ´s/\<./\u&/g´
# Convierte DOS newlines (CR/LF) a formato Unix (LF)
$ sed ´s/^M$//´4
# también funcionaría
47
$ sed ´s/\r//´
EL COMANDO SED (EDITOR DE FLUJO)
¢ Comandos desde fichero: la opción -f

8/5/18
permite leer comandos de sed agrupados en un
fichero

Administración de Sistemas
¢ Ejemplo: reemplazo desde la línea 1 hasta una
línea que comience por END (o el final, si no hay
ninguna)
$> cat file.sed
1,/^END/{
s/[Ll]inux/GNU\/Linux/g
s/samba/Samba/g
}
48
$> sed -f file.sed fichero
AWK
¢ Lenguaje de manejo y procesamiento de patrones

8/5/18
de caracteres más potente que sed.

Administración de Sistemas
¢ Origen del nombre

49

Alfred Aho Peter Weinberger Brian Kernighan


INTRODUCCIÓN A AWK
¢ Comandos de sintaxis cercana a C

8/5/18
¢ Formato

Administración de Sistemas
awk [['patrón] [{ acción...}']...] ficheros...
awk -f fichero_comandos ficheros...
— Cada línea de entrada es analizada con cada patrón y si
coinciden se ejecuta la acción asociada.
¢ Analiza cada línea por campos separados por blancos
o tabuladores. Los campos se acceden con $1,
$2...$NF (variables especiales predefinidas de solo
lectura)
¢ Operaciones aritméticas y variables (tipo C)
50
ESTRUCTURA DE UN PROGRAMA AWK
¢ Segmento BEGIN

8/5/18
opcional

Administración de Sistemas
— Se ejecuta antes de
leer la entrada
¢ Pares patron-acción
— Usan datos entrada
— Si hay acierto, se
ejecuta la acción
¢ Segmento END
opcional
— Se ejecuta después de
leer la entrada 51
AWK

¢ Salida formateada (printf)

8/5/18
¢ Estructuras de control : if-else, for, while, break, exit,
next

Administración de Sistemas
¢ Funciones incorporadas : length, sin, cos, match, ...
¢ Arrays
¢ ¿Qué hacen los siguientes ejemplos?
$ echo -e "Betty Jennings\nBetty Snyder\nFrances
Spence" |
awk ' /Betty/ { print $2 } '
Jennings
Snyder

$ awk '{ if (length($0) > max) max = length($0) } END 52


{ print max }' data
BÚSQUEDA DE PARES DE PALABRAS
IDÉNTICAS EN AWK
awk '

8/5/18
FILENAME != prevfile {
NR = 1
prevfile = FILENAME

Administración de Sistemas
}
NF > O {
if ($1 == lastword)
printf "double %s, file %s, line %d\n",
$1,FILENAME, NR
for (i = 2; i <= NF; i++)
if ($i == $(i-1))
printf "double %s, file %s, line %d\n",
$i,FILENAME, NR
if (NF > O)
lastword = $NF
} '
¢ FILENAME: nombre fichero, NF: nº campos, NR: nº 53
línea

También podría gustarte