0% encontró este documento útil (0 votos)
21 vistas22 páginas

Cuaderno Practicas II

Cuaderno_practicas_II ASO
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
21 vistas22 páginas

Cuaderno Practicas II

Cuaderno_practicas_II ASO
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 22

Cuaderno de prácticas II

Herramientas UNIX
Sistema Operativo Linux Suse 9.3

Dpto. Física y Arquitectura de Computadores


Área de Arquitectura y tecnología de Computadores
Universidad Miguel Hernández
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

INDICE DE CONTENIDOS

1. OBJETIVOS DEL Cuaderno de prácticas II


2. BÚSQUEDA DE PATRONES EN ARCHIVOS
2.1. grep
2.1.1.Búsqueda de patrones usando expresiones regulares
2.1.2.Cuatro parámetros útiles
2.2. fgrep
2.3. egrep
3. TRABAJO CON COLUMNAS Y CAMPOS
3.1. cut
3.1.1.Uso de cut con campos
3.1.2.Especificación de múltiples campos
3.1.3.Especificación de delimitadores
3.1.4.Uso de cut con múltiples archivos
3.1.5.Uso de cut con columnas
3.2. paste
3.2.1.Especificación del separador de campo en paste
3.2.1.1. Utilización de paste con la entrada estándar
3.2.1.2. Utilización de cut y paste para reorganizar un archivo
3.3. join
3.3.1.Especificación del campo en join
3.3.2.Especificación de separadores de campo
4. HERRAMIENTAS PARA LA ORDENACION
4.1. sort
4.1.1.Sustitución del archivo original
4.1.2.Reglas de ordenación alternativas
4.1.3.Ordenación por campo o columna
4.1.4.Especificación del separador de campo
4.1.5.Supresión de líneas repetidas
4.2. uniq
4.2.1.Cuenta de repeticiones
4.2.2.Búsqueda de líneas repetidas y no repetidas
5. COMPARACION DE ARCHIVOS
5.1. cmp
5.2. comm
5.3. diff
5.4. dicmp
6. CAMBIO DE INFORMACION EN ARCHIVOS
6.1. tr
6.1.1.Eliminación de rangos y repeticiones
6.1.2.Eliminación de caracteres repetidos
6.1.3.Especificación de caracteres complementarios
6.1.4.Eliminación de caracteres
6.2. sed
6.2.1.Cómo funciona sed
6.2.2.Selección de líneas
6.2.3.Resumen de órdenes de sed
7. BUSQUEDA DE ARCHIVOS: la orden find

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 2
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

1. OBJETIVOS DEL Cuaderno de prácticas II


El objetivo del siguiente documento es familiarizarse con un conjunto de órdenes
particularmente útil, conocido habitualmente como herramientas o utilidades. La mayoría de las
herramientas descritas en este tema se conocen habitualmente como filtros. Son programas
que leen la entrada estándar, operan sobre ella y generan el resultado como salda estándar.
No son interactivos, no solicitan ni esperan entrada por parte del usuario.

2. BÚSQUEDA DE PATRONES EN ARCHIVOS


Entre las herramientas mas útiles en el sistema UNIX están Ias encargadas de encontrar
palabras en archives: grep, fgrep y egrep. Estas órdenes encuentran líneas que contienen
texto que coincide con un objetivo o patrón especificado. Pueden usarse para extraer
información de archivos, para buscar líneas relacionadas con un elemento en particular y para
Iocalizar archivos que contengan una palabra clave particular.
Las tres órdenes descritas en esta sección son muy similares. Todas imprimen Líneas que
se identifican con un objetivo, Difieren en Ia manera de especificar los objetivos de búsqueda.
 grep es el mas usado de los tres. Permite buscar palabras 0 patrones que
contengan comodines y otros elementos de expresiones regulares.
 fgrep no permite expresiones regulares, pero sí buscar objetivos múltiples
 egrep uas un conjunto más rico de expresiones regulares, permite búsquedas con
objetivos múltiples y es considerablemente más rápido que grep.
2.1. grep
Busca en uno o más archivos las líneas que contengan un objetivo, e imprime todas las
líneas que encuentra.
Por ejemplo: la siguiente orden imprime todas las líneas en el archivo fichero1 que
contiene la palabra “habitación”:

$ grep habitacion fichero1


La habitación se dejara libre a la 12 horas
No debes permanecer en la habitación en caso de incendio

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

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 3
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

2.1.1. Búsqueda de patrones usando expresiones regulares


Los ejemplos que hemos visto hasta aquí han utilizado grep para buscar palabras
específicas o cadenas de texto, pero grep también permite buscar objetivos definidos
como patrones que pueden identificar a un número de palabras o cadenas diferentes.
Con grep se especifican patrones utilizando expresiones regulares. De hecho, el
nombre “grep“ significa "global regular expresión and printf". Las reglas y símbolos
utilizados para formar expresiones regulares en vi también pueden utilizarse con grep
para buscar patrones. Por ejemplo:

$ grep 'ch.*se' recetas

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:

$ grep ' ^\ .D [SE] $ ' manuscrito

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

La siguiente tabla lista los símbolos de expresiones regulares que resultan


útiles para formar patrones de búsqueda grep.

2.1.2. Cuatro parámetros útiles


La opción –v

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.

$ grep –v ' [ 0 -9] ' tfonos

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”:

$ grep Unix fichero

Poniendo:
$ grep Unix fichero

buscaría todas las combinaciones de mayúsculas y minúsculas de “Unix”.

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 5
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

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

Busca los objetivos “pavo” y “pollo” en el archivo recetas.


2.3. egrep
Puede buscar múltiples patrones y, además, utilizar un conjunto más completo de
expresiones regulares.
Por ejemplo:

$ egrep “pedro|pepe|pepa” agenda

Busca las entradas correspondientes a “pedro”, “pepe” y “pepa” en el archivo agenda.


Nótese que no hay espacios en blanco entre las tuberías, ya que los tomaría como parte de
la búsqueda del patrón. También se podrían poner en líneas independientes como con
fgrep.

3. TRABAJO CON COLUMNAS Y CAMPOS


Muchos archivos contienen información organizada en términos de posiciones dentro de
una línea. Entre elles están las tablas, que organizan la información en columnas y los archivos
que constan de líneas o registros formados por campos. El sistema UNIX incluye varias
herramientas diseñadas específicamente para operar con archivos organizados en columnas o

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 6
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

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.1.1. Uso de cut con campos


Supongamos el archivo telnos mostrado aquí:

Para recuperar un campo en particular de cada uno de los registros de un


archivo se da a cut el número de campo que se desea. En el siguiente ejemplo se
selecciona el primer campo de cada línea o registro:

3.1.2. Especificación de múltiples campos


Se puede seleccionar un conjuto de campos:

$ cut –f1,3 telnos

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 7
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

Selecciona los campos 1 y 3 de telnos.

$ cut –f1, 3-4 telnos

Selecciona los campos 1 y del 3 al 4.

$ cut –f2- telnos

Selecciona desde el campo 2 (inclusive) hasta el final de la línea.

3.1.3. Especificación de delimitadores


Se utiliza el parámetro “d” para indicar cuál es el carácter separador de campos
cuando estos no estén separados por un único carácter blanco.
El archivo /etc/passwd contiene como carácter separador de campo los “:”. La
siguiente orden selecciona el nombre de presentación, nombre de usuario y directorio
de presentación (campos 1, 5 y 6) de dicho archivo:

$ cut –d: -f 1,5-6 /etc/passwd

Si el delimitador tiene un significado especial para el shell, debería ir entre


comillas. Por ejemplo, la siguiente orden dice a cut que imprima todos los campos a
partir del segundo, utilizando un espacio como delimitador.
$ cut –d’ ‘ –f2- file

3.1.4. Uso de cut con múltiples archivos


Se pueden seleccionar campos de varios archivos al mismo tiempo:

$ cut –f1,3 fich1 fich2

3.1.5. Uso de cut con columnas


La opción –c (columna) dice a cut que identifique los campos en términos de los
caracteres dentro de una línea. La orden siguiente selecciona el tamaño (posiciones
40-48) y los nombres (posiciones 66 hasta el final) de cada archivo en la salida de ls:

$ ls –l | cut –c30 – 38,54 -

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 8
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

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:

$ paste states state_abr capitals

Naturalmente, si los contenidos de los archivos no coinciden (si no están en el mismo


orden, o si no contienen el mismo número de entradas) el resultado no será el esperado.

3.2.1. Especificación del separador de campo en paste


El delimitador por defecto es el tabulador, pero como ocurre con cut, se puede
usar la opción –d (delimitador) para especificar otro si se desea.

$ paste -d: states state_abr capitals

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.

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 9
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

3.2.1.2. Utilización de cut y paste para reorganizar un archivo


Las órdenes siguientes cambian el segundo y tercer campos del archivo telnos:

$ cut –f1,3 telnos > temp


$ cut –f4- telnos > temp2
$cut –f2 telnos | paste temp – temp2 > telnos.new

La primea orden corta los campos 1 y 3 de telnos y los coloca en temp. La


segunda orden corta el 4 campo de telnos y lo coloca en temp2. Finalmente, la
última orden corta el segundo campo, utiliza un cauce para enviar su salida a
paste, que crea un nuevo archivo, telnos.new con los campos nombre, habitación,
número de teléfono, correo electrónico y notas a nombre, número de teléfono,
habitación, correo electrónico y notas. Obsérvese el uso del signo menos para
decir a paste que coloque la entrada estándar (procedente del cauce) entre los
contenidos de temp y temp2.
3.3. join
La orden join crea un nuevo archivo unido dos archivos existentes sobre la base de un
campo clave que contiene entradas comunes a ambos. Es similar a paste, pero join
identifica líneas de acuerdo al campo clave, en vez de juntarlas simplemente. El campo
clave aparece sólo una vez en la salida. Veamos el siguiente ejemplo:

3.3.1. Especificación del campo en join


Por defecto, join utiliza el primer campo de cada archivo de entrada como campo
común de unión. Se pueden usar otros campos como campo común con la opción –j
(join):

$ join –j1 2 –j2 3 fichero > fichero 2

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 10
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

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.

3.3.2. Especificación de separadores de campo


join trata cualquier espacio en blanco (un espacio o un tabulador) en la entrada
como separador de campo. Utiliza el carácter espacio en blanco como delimitador por
defecto en la salida.
Con la opción –t (tab) se puede cambiar el separador de campo. La orden
siguiente une los datos de los archivos del sistema /etc/passwd y /etc/group, utilizando
ambos dos puntos como separador de campo. El mismo separador se utiliza para la
entrada y para la salida.

$ join –t: /etc/passwd /etc/group > destino

Desafortunadamente, la letra de opción que utiliza join para especificar el


delimitador (-t) es diferente de la (-d) utilizada por cut, paste y otras órdenes del
sistema UNIX.

4. HERRAMIENTAS PARA LA ORDENACION


Muchas tareas requieren el uso de datos ordenados, y la ordenación de información en
archivos y el trabajo sobre archivos ordenados son algunas de las tareas más comunes de una
computadora. La información se ordena en un archivo para facilitar la lectura, para facilitar la
comparación de dos listas o para preparar la información procesada por una orden que
necesita las entradas ordenadas. La información se puede ordenar alfabética o
numéricamente, por líneas o en función de un campo o columna particular.
Una de las órdenes más útiles del sistema UNIX es sort, una herramienta potente de
propósito general para ordenar información. Además, esta sección describe uniq, una orden
útil para identificar y eliminar líneas duplicadas de datos ordenados.
sort y uniq operan sobre líneas completas o campos específicos. En el último caso,
complementan a las herramientas de corte y unión descritas en la sección anterior.

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

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 11
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

La siguiente orden crea un archivo names.all que contiene todos los nombres de tres
archivos de entrada, ordenados alfabéticamente:

$ sort names.1 names.2 names.3 > names.all

4.1.1. Sustitución del archivo original


A menudo, cuando se ordena un archivo, se necesita sustituir el original por la
versión ordenada:
$ sort telnos > telnos.sort
$ mv telnos.sort telnos

La primera ordena telnos y coloca los datos ordenados en el nuevo archivo


tenos.sort. Después telnos.sort se renombra a telnos.
La sustitución de un archivo por una versión ordenada es tan frecuente que en
UNIX existe una opción –o (output) que se puede utilizar para decir a sort que sustituya
el archivo de entrada con la versión ordenada. Lo siguiente ordena telnos y sustituye su
contenido con el contenido ordenado:

$ sort –o telnos telnos

Nótese que no se puede redirigir simplemente la salida de sort al archivo original.


Puesto que el shell crea el archivo de salida antes de ejecutar la orden, lo que
eliminaría el archivo original.

4.1.2. Reglas de ordenación alternativas


Varias opciones permiten cambiar la regla que utiliza sort para ordenar su salida.
Entre estas opciones están la independencia del tipo mayúscula o minúscula, -f (fold),
la ordenación numérica, -n (numérico) y la inversión del orden en una salida ordenada,
-r (reverse).

4.1.3. Ordenación por campo o columna


Por defecto, sort compara y ordena líneas enteras, comenzando por el primer
carácter. Sin embargo, a menudo se necesita ordenar sobre la base de un campo o
columna particular. Por ejemplo, la orden siguiente dice a sort que ignore o salte la
primera columna cuando ordena los datos en fichero:

$ sort +1 fichero

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 12
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

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.1.4. Especificación del separador de campo


Como sut, sort permite especificar un seprador de campo alternativo. Esto se
puede hacer con la opción –t (tab). La orden siguiente dice a sort que salte los
primeros tres campos de un archivo que utiliza dos puntos (:) como separador de
campos:

$ sort –t: +3 fichero

4.1.5. Supresión de líneas repetidas


Con la opción –u (unique) se eliminan las líneas repetidas de la entrada.

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:

$ sort names.* | uniq > names

4.2.1. Cuenta de repeticiones


Uno de los usos más valioso de uniq es la cuenta del número de ocurrencias de
cada línea.
A continuación se ilustra cómo se podría utilizar uniq junto con cut y sort para
producir un listado del número de entradas de cada código postal en una lista de
correos:

$ sort –f6 mail.list | sort | uniq -c | sort -rn

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

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 13
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

numéricamente (n) en orden inverso (r), de manera que los datos se visualizan en
orden descendente de frecuencia.

4.2.2. Búsqueda de líneas repetidas y no repetidas


En lugar de eliminar simplemente las líneas repetidas, puede que quiera saber
qué líneas ocurren más de una vez y cuáles ocurren solamente una vez. La opción –d
(duplicate) dice a uniq que muestre solamente las líneas repetidas y la opción –u
(unique) imprime las líneas que sólo aparecen una vez. Por ejemplo, lo siguiente
muestra los códigos postales que aparecen sólo una vez en la lista de correos:

$ cut -f6 mail.list | uniq -u

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:

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 14
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

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:

$ comm. -23 cities.1 cities.2

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.

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 15
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

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:

$ diff -e memo.1 memo.3 > version.3

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:

$ dircmp Book/Chap /home/sue/Book/Chap

La primera parte de la salida de dircmp muestra nombres de archivos únicos para


cada directorio. Si hay archivos con el mismo nombre en ambos directorios, dircmp informa
si sus contenidos son el mismo o diferentes.

6. CAMBIO DE INFORMACION EN ARCHIVOS


A veces se necesita modificar el contenido de un archivo añadiendo, eliminando o
cambiando su información, pero no es necesario ( o no se puede ) hacerlo de forma interactiva.
Por ejemplo, cuando se está haciendo uno o más cambios globales simples; por ejemplo,
cambiar todos los tabuladores a espacios, como parte de la conversión de un archivo de un
formato a otro. Otro ejemplo frecuente consiste en tomar la salida de una orden dentro de un
cauce y modificarla antes de enviarla al siguiente.
El sistema UNIX proporciona diferentes herramientas para la edición no interactiva. Esta
sección describe dos de ellas, tr y sed.
 tr (translate) es un ejemplo de herramienta del sistema UNIX diseñada para
realizar una función básica; cambia o traduce caracteres procedentes de la entrada
de acuerdo a reglas que se especifican.
Juan de Dios Valero Serra Sistemas Operativos
juande.valero@umh.es 16
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

 Sed proporciona un amplio rango de capacidades de edición, incluyendo casi todas


las funciones de edición que se encuentran en los editores interactivos ed y vi, pero
en forma no interactiva.
6.1. tr
La mejor forma de explicar lo que tr es mediante un ejemplo simple. Supongamos que
tenemos un archivo que usa los dos puntos (:) para separar campos y que necesitamos
cambiar cada dos puntos en el archivo capitals a tabuladores.

Nótese que el carácter tabulador en los argumentos va entre comillas simples


para evitar que el shell lo trate como un espacio en blanco. También observe que el
ejemplo utiliza el símbolo de la redirección de la entrada (<) para especificar el archivo
de entrada (tr es una de las pocas herramientas del sistema UNIX que no permiten
especificar un nombre de archivo como argumento, sino con el símbolo de redirección.
tr sólo lee la entrada estándar, de manera que hay que utilizar la redirección de la
entrada o un cauce para proporcionar la entrada).
tr puede traducir cualquier número de caracteres. En general, a tr se le
proporcionan dos lista de caracteres, una lista de entrada (caracteres de entrada a
traducir) y otra salida (caracteres en los que se traducen a la salida). tr sustituye cada
instancia de un carácter en el conjunto de entrada con el carácter correspondiente en el
conjunto de salida. Es decir, traduce el primer carácter de las lista de entrada al primer
carácter de la lista de salida, el segundo al segundo y así sucesivamente.
Por ejemplo, la orden siguiente sustituye los caracteres a,b y c de lis1 por las
correspondientes letras mayúsculas:

$ tr abc ABC < list1

Dado que cada carácter en la lista de entrada se corresponde con un carácter


en la lista de salida, las listas de entrada y salida deben tener el mismo númeo de
caracteres.

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 17
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

6.1.1. Eliminación de rangos y repeticiones


Existen varias formas de simplificar el tecleado de las listas de caracteres de
entrada y salida para tr.
Se pueden utilizar corchetes y un signo menos (-) para indicar un rango de
caracteres, similar al uso de patrones de rango en las expresiones regulares e
identificación de nombres de archivos. Lo siguiente utiliza tr para traducir todas las
letras minúsculas de fichero a mayúsculas:

$ tr ‘ [a – z] ‘ ‘[ A – Z ]’ < fichero

Si se desea traducir cada uno de los caracteres de un conjunto de entrada al


mismo carácter de salida, puede utilizar un asterisco para decir a tr que repita el
carácter de salida. Por ejemplo, lo siguiente sustituye cada dígito de la entrada con el
signo de número (#).

$ tr ‘ [ 0 – 9 ]’ ‘[# * ]’ z data

Obsérvese que de bueno es necesario poner las cadenas de entrada y salida


entre corchete y comillas. La capacidad para usar un asterisco de este modo es una
característica de SVR4 que no está en todas las versiones de tr.

6.1.2. Eliminación de caracteres repetidos


El ejemplo anterior traduce los dígitos a signos numéricos. Cada dígito d un
número producirá un signo numérico en la salida. Por ejemplo, 1990 se convierte en
####. Se puede decir a tr que elimine los caracteres repetidos de la cadena traducida
con la opción –s (squeeze). La versión siguiente de la orden anterior sustituye cada
número de entrada con un único signo numérico en la salida, independientemente de
los dígitos que contiene:

$ tr -s ‘[0 - 9 ]’ ‘[ # * ] ‘ < 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.

$ tr -s ‘<SPACE>’ ‘ \012 ‘ < short | sort | uniq -c

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 18
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

Si se quieren listar las palabras en orden de frecuencia descendente, se puede


encauzar la salida de uniq –c a sort -rn.

6.1.3. Especificación de caracteres complementarios


La opción –c (complemento) dice a tr qué caracteres no debe traducir.
La orden siguiente hace visibles los caracteres no alfanuméricos de un archivo
traduciendo los caracteres que no son alfabéticos o dígitos a signos numéricos.

$ tr -c ‘ [A - Z ] [a - z ] [0 – 9] ‘ ‘[# *] ‘ < file

6.1.4. Eliminación de caracteres


Se puede utilizar la opción –d (delete) para decir a tr que borre en la salida
caracteres del conjunto de entrada. La orden siguiente elimina todo, excepto los
caracteres alfabéticos y los dígitos.
$ tr -cd “[A - Z ] [a - z ] [0 – 9]” < file

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

6.2.2. Selección de líneas


Las órdenes de edición de sed constan generalmente de una dirección y una
operación. La dirección dice a sed sobre qué línea actuar. Existen dos formas para
especificar direcciones: por números de líneas y por patrones de expresiones
regulares.

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 19
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

La siguiente orden borra las primeras cuatro líneas:

$ sed ‘ 1,4 d ’ data

La siguiente orden elimina todas las líneas que contienen “New York” en el
archivo state.

$ sed ‘ /New York/ d ’ states

También se puede especificar un rango utilizando dos expresiones regulares


separadas por una coma.
El signo dólar ($) representa la última línea de un archivo.

6.2.3. Resumen de órdenes de sed


La siguiente tabla resume las órdenes básicas de edición de sed. En esta tabla,
addr1, addr2 significa un rango de líneas (todas las líneas entre la primera y la segunda
dirección). Las órdenes que aceptan un rango aceptarán también una dirección de una
línea única.

7. BUSQUEDA DE ARCHIVOS: la orden find


Con la orden find se puede explorar cualquier parte del sistema de archivos buscando
todos los que tengan un nombre particular. Esto es extremadamente potente y, a veces, puede
ser un salvavidas. Pero también resulta difícil de recordar y utilizar.

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 20
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

Un ejemplo de problema frecuente que find puede ayudar a resolver es el de localizar un


archivo que se tiene mal colocado. Por ejemplo, si quiere encontrar un archivo denominado
fichero1, pero no se acuerda de dónde lo situó, puede utilizar find para buscar por todo o parte
de su directorio.
La orden find busca en uno o más directorios, incluyendo todos los subdirectorios. Hay que
decir a find en qué directorio debe comenzar la búsqueda. Por ejemplo, para que busque en
todos sus directorios, diga a find que comience en su directorio de trabajo. El siguiente ejemplo
busca en el directorio de jmf el archivo fichero1 e imprime el camino completo de todos los
archivos que encuentre con ese nombre.

$ find . –name fichero1 -print


/home/jmf/Dir/logs/fichero1
/home/jmf/cmdsDir/data/fichero1

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:

$ find . /tmp/project -name fichero1 -print

Con find se puede utilizar símbolos comodines para buscar archivos en caso de no conocer
los nombres exactos:

$ find . –name “*ero1” -print

La orden anterior buscará todos los archivos que terminen en ero1.


Veamos más criterios para organizar la búsqueda:
 -perm: hace que fin busque archivos que tienen un patrón particular de permisos
(utilizando octal).
 -type : permite especificar el tipo de archivo a buscar. Por ejemplo, para buscar un
directorio utilizar –type d.
 -user: restringe la búsqueda a archivos que pertenecen a un usuario particular.

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 21
Ingeniería Técnica en Informática de Gestión Cuaderno de prácticas II: Herramientas UNIX

Ejemplo de opciones combinadas:

$ find . –name “garde” -u sue -type d -print

Juan de Dios Valero Serra Sistemas Operativos


juande.valero@umh.es 22

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy