Cuaderno Practicas II
Cuaderno Practicas II
Herramientas UNIX
Sistema Operativo Linux Suse 9.3
INDICE DE CONTENIDOS
El objetivo puede ser una frase, es decir, dos o más palabras separadas por espacios.
Por ejemplo:
$ grep una frase fichero1
Deberás resaltar una frase que te guste
buscará las entradas que contengan "chinese" o "cheese". El punto (.) se identifica con
cualquier número de caracteres excepto NEWLINE (cualquier número incluye cero, por
tanto, el punto también identificará nada). El asterisco especifica cualquier número de
repeticiones; juntos indican cualquier cadena de cualquier carácter. (Dado que este
patrón identifica cualquier cadena que comience con "ch" y acabe con "se", también
identificará una línea que contenga "reach for these".)
Nótese que en este ejemplo el patrón objetivo "ch. *se" va entre comillas. Esto
es para evitar que el asterisco sea considerado por el shell come un comodín de
nombre de archivo. En general, debe recordarse entrecomillar cualquier expresión
regular que contenga un asterisco o cualquier otro carácter que tenga un significado
especial para el shell.
Otros símbolos de expresiones regulares que se utilizan con frecuencia para
especificar objetivos para grep sen el signe circunflejo (^) y el signo dólar ($), que son
utilizados para anclar palabras al comienzo y al final de líneas, y les corchetes ([ ]), que
se utilizan para indicar una clase de caracteres. El siguiente ejemplo demuestra como
se pueden utilizar para especificar patrones come objetivos:
Esta orden busca todas las líneas que contienen ".DS" o ".DE’, es decir, las macros mm
para el comienzo o la finalización de visualizaciones, en el archivo manuscrito. Se
puede utilizar esta orden para averiguar cuantas visualizaciones se tienen y para
asegurarse de que el comienzo y el final de las macros esta equilibrado. A primera
vista este puede parecer desalentador, pero se trata realmente de una aplicación muy
directa de las reglas para especificar patrones. Los signos circunflejo y dólar indican
que el patrón ocupa la línea completa. La barra invertida (\) evita que el punto (.) sea
considerado come un carácter de expresión regular (representa aquí un punte). Los
corchetes indican que el objetivo puede incluir una S o una E.
Juan de Dios Valero Serra Sistemas Operativos
juande.valero@umh.es 4
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX
Se trata de una forma rápida de buscar entradas en un archivo a las que le falta un
trozo de información. Por ejemplo, la siguiente orden buscará en el archivo tfonos e
imprimirá todas las líneas que no contienen números. De esta forma se si en mi
agenda de teléfonos hay nombres sin sus correspondientes teléfonos.
La opción – i
Se utiliza para no distiguir entre mayúsculas y minúsculas. Por ejemplo, la siguiente
orden buscaría “Unix”, pero no “UNIX” ni “unix”:
Poniendo:
$ grep Unix fichero
La opción –l
Se utiliza para buscar no todas las líneas de coincidencia, sino sólo los nombres de
archivos donde aparecen coincidencias, es decir que cumplen el objetivo. Por ejemplo:
$ grep –l pepe *
Devolvería el nombre de los ficheros del directorio actual que contienen el nombre
“pepe”
La opción –n
Permite listar el número de línea donde se encontró el objetivo.
2.2. fgrep
No acepta expresiones regulares. Los objetivos deben ser cadenas de texto. Fgrep
permite buscar varios objetivos (varios patrones de búsqueda). Hay que colocarlos en
líneas independientes. Por ejemplo:
$ fgrep “pollo
< pavo” recetas
campos. Se pueden utilizar las órdenes descritas en esta sección para extraer y modificar o
reorganizar la información de archivos estructurados en campos o por columnas.
cut permite seleccionar columnas o campos particulares de archives.
paste crea nuevas tablas o archives de base de datos juntando columnas o campos de
archives existentes.
join mezcla la información de dos archives de base de dates para crear un nuevo
archivo que combina la información de ambos.
3.1. cut
A veces sólo interesa algunos de les campos o columnas contenidos en una tabla o
archivo. Por ejemplo, puede que sólo se quiera obtener un nombre de un archivo de
personal que contiene el nombre, el número de empleado, la dirección, el número de
teléfono y demás. cut permite extraer de tales archivos sólo los campos o columnas
deseados.
Cuando se utiliza cut, hay que decirle cómo identificar los campos (por la posición de
los caracteres o mediante el uso de caracteres separadores de campos) y qué campos
seleccionar. Se debe especificar la opción –c o –f y el campo o campos a seleccionar.
3.2. paste
La orden paste une archivos línea a línea. Se puede usar para crear nuevas tablas
juntando campos o columnas de dos o más archivos. En el siguiente ejemplo, la orden
paste crea un archivo nuevo combinando la información de states y state_abbr:
Se puede usar paste para combinar varios archivos. Si capitals contiene le nombre de
las capitales del estado, la orden siguiente crearía un archivo con los nombres de estado,
abreviaturas y capitales:
La orden anterior combina los archivos de estados utilizando los dos puntos como
delimitador.
3.2.1.1. Utilización de paste con la entrada estándar
Se puede usar el signo menos (-) para decirle a paste que tome uno de sus
“archivos” de entrada de la entrada estándar. Por ejemplo:
$ paste telnos - > telnos.new
La orden anterior permite teclear un nuevo campo a cada línea del archivo
telnos.
El ejemplo anterior utiliza el número de campo uno del primer archivo y el número
de campo 3 del segundo archivo como campos de unión.
4.1. sort
sort ordena o reordena las líneas de un archivo. En la forma más simple, todo lo que
se necesita hacer es darle el nombre del archivo a ordenar. El ejemplo siguiente ordena
alfabéticamente una lista de nombres:
$ sort names
La siguiente orden crea un archivo names.all que contiene todos los nombres de tres
archivos de entrada, ordenados alfabéticamente:
$ sort +1 fichero
Cuando se utiliza esta opción para saltar uno o más campos, es conveniente
asegurarse de que de hecho se saltan los correctos.
4.2. uniq
uniq filtra o elimina las líneas repetidas de los archivos. Normalmente se utiliza con
archivos que han sido ordenados con sort. En su forma más simple tiene el mismo efecto
que la opción –u de sort y constituye una alternativa al uso de esta opción. uniq también
dispone de diferentes opciones útiles, incluyendo uno para contar el numero de veces que
cada línea se repite y otras para visualizar líneas repetidas o líneas únicas.
El siguiente ejemplo muestra cómo se puede utilizar uniq como alternativa a la opción
-u de sort:
La orden anterior utiliza un cauce con cuatro órdenes: la primera corta el campo
de código postal del archivo de la lista de correos. La segunda utiliza sort para agrupar
las líneas idénticas. La tercera utiliza uniq –c para eliminar líneas repetidas y añadir
una cuenta de cuántas veces apareció cada línea. La última sort –rn ordena las líneas
numéricamente (n) en orden inverso (r), de manera que los datos se visualizan en
orden descendente de frecuencia.
5. COMPARACION DE ARCHIVOS
Con frecuencia se necesita ver si dos archivos tienen diferente contenido y listar las
diferencias en caso afirmativo. También resulta útil la posibilidad de ver si archivos que tienen
el mismo nombre en directorios diferentes son simplemente copias del mismo archivo o se trata
de archivos diferentes. Las órdenes descritas en esta sección se pueden utilizar para comparar
contenidos de archivos y directorios y para mostrar las diferencias en caso de que existan.
cmp, comm y diff informan de si dos archivos son el mismo o diferentes y
proporcionan información de dónde o cómo difieren. Se distinguen por la cantidad
de información que proporcionan y la forma de visualizarla.
dircmp dice si los archivos de dos directorios son el mismo o diferentes.
5.1. cmp
cmp es la herramienta más simple de comparación de archivos. Dice si dos archivos
difieren o no, y en caso afirmativo, informa del lugar dentro del archivo donde ocurre la
primera diferencia. Veamos el siguiente ejemplo:
Esta salida muestra que la primera diferencia entre los dos archivos ocurre en el
carácter 27, que está en la tercera línea. cmp no imprime nada si no hay diferencias entre
los archivos.
5.2. comm
La oren comm (common) sirve para comparar dos archivos ordenados y mostrar las
líneas iguales o diferentes. Se pueden visualizar líneas que sólo se encuentran en el primer
archivo, líneas que se encuentran en el segundo y aquellas que se encuentran en ambos.
Por defecto, comm imprime su salida en tres columnas: líneas únicas en el primer
archivo, líneas únicas e el segundo y líneas de ambos, respectivamente.
comm dispone de opciones que pueden utilizarse para controlar los informes de
resumen a imprimir. Las opciones -1 y -2 eliminan los informes de las líneas únicas del
primer y segundo archivos. Se usa -3 para eliminar las impresión de las líneas de ambos.
Estas opciones se pueden combinar. Por ejemplo, para eliminar sólo las líneas únicas del
archivo, utilice -23. Por ejemplo:
5.3. diff
diff compara dos archivos línea a línea e imprime las diferencias. Además, para cada
bloque de texto diferente en los dos archivos, diff dice cómo ha de cambiarse el texto del
primer archivo para que coincida con el texto del segundo.
Las líneas que contienen el texto que sólo se encuentran en el primer archivo
comienzan con <. Las líneas que contienen texto que sólo se encuentre en el segundo
archivo comienzan con >. Las líneas de guiones separan partes de la salida de diff que
hacen referencia a las diferentes secciones de los archivos.
Cada sección de la salida de diff comienza con un código que indica el tipo de
diferencias al que hacen referencia las siguientes líneas. En el ejemplo anterior, el primer
par de diferencias comienza con el código 3c3. Esto significa que existe un cambio (c)
entre la línea 3 del primer archivo y la línea 3 del segundo. La segunda diferencia comienza
con 4a5. La letra a (append) indica que la línea 5 del segundo archivo se añade a
continuación de la línea 4 del primero. Análogamente, una d (deleted) indicaría líneas que
se encuentran en un archivo pero no en el otro.
Estos códigos son similares a las ordenes ed o vi, y de hecho, con la opción –e (editor)
se puede decir a diff que genere la salida en la forma de ordenes de editor necesarias para
transformar un archivo en otro. Este permite recordar las versiones sucesivas de un
manuscrito sin tener que conservar todas las versiones intermedias. Todo lo que se
necesita hacer es guardar la versión original y las órdenes ed necesarias para cambiarla.
Por ejemplo, si la versión original de un documento es memo.1 y la versión actual es
memo.3, pueden salvarse los cambios que recrearían memo.3 a partir del original con la
siguiente orden diff:
5.4. dicmp
cmp, comm y diff comparan archivos y generan información sobre las diferencias entre
ellos. dircmp compara directorios e informa de cómo difieren.
Comparar directorios de esta forma resulta especialmente útil cuando se está
compartiendo información con otros usuarios. dircmp puede informar rápidamente de qué
archivos en un directorio son iguales y cuáles diferentes.
Por ejemplo, la siguiente orden compararía el contenido del directorio Book/Chap con
un directorio similar perteneciente al usuario sue:
$ tr ‘ [a – z] ‘ ‘[ A – Z ]’ < fichero
$ tr ‘ [ 0 – 9 ]’ ‘[# * ]’ z data
Se puede usar tr para crear una lista de todas las palabras que aparecen en un
archivo. La orden siguiente coloca cada palabra del archivo en una línea separada
sustituyendo cada espacio por un NEWLINE. Después ordena las palabras
alfabéticamente y utiliza uniq para generar una salida que lista cada palabra y el
número de veces que aparece en el archivo.
Nótese que este ejemplo particular eliminará los signos de puntuación, los
espacios en blanco y otros caracteres.
6.2. sed
Es una herramienta potente para filtrar archivos de texto. Puede realizar casi todas las
funciones de edición de los editores interactivos ed y vi.
Se utiliza con frecuencia en los guiones shell o comparte de un cauce para filtrar la
salida de una orden. Sed es particularmente útil cuando hay que modificar un archivo muy
grande.
6.2.1. Cómo funciona sed
Para editar un archivo con sed, hay que darle una lista de órdenes de edición y el
nombre del archivo. Por ejemplo, la orden siguiente borra la primera línea del archivo
data:
$ sed ‘ 1d ’ data
La siguiente orden elimina todas las líneas que contienen “New York” en el
archivo state.
Este ejemplo ilustra la forma básica de la orden find. El primer argumente es el nombre del
directorio en el que comienza la búsqueda. En este caso se trata del directorio actual
(representado por punto). La segunda parte de la orden especifica el nombre de lo que se debe
buscar y la tercera parte dice a find que imprima el nombre del camino completo de todos los
archivos que encuentre.
Obsérvese que hay que incluir las opción –print. Si no se hace, find llevará a cabo la
búsqueda, pero no notificará sobre ningún archivo que encuentre.
Se puede decir a find que busque en varios directorios dándole cada uno de ellos como
argumentos:
Con find se puede utilizar símbolos comodines para buscar archivos en caso de no conocer
los nombres exactos: