Documentos de Académico
Documentos de Profesional
Documentos de Cultura
8/5/18
¢ Comando find
Administración de Sistemas
¢ Expresiones regulares
¢ La familia grep
¢ El editor de línea ed
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
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:
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
¢
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
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
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
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
¢ 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
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
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
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
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