Programa a realizar interactivamente

A continuación vas a pasar a un ejercicio para realizar una macro con ayuda del ordenador. El sistema te irá guiando paso a paso en lo que debes hacer, preguntándote cada paso concreto, salvo aquellos que parecen obvios, por ser de temas anteriores. Si te equivocas te dará pistas explícitas.

Tienes que ir haciendo la macro en el editor: no va a aparecer toda junta escrita, ni lo va a estar si tú no la escribes; entonces vete abriendo el editor y vas rellenando al ir contestando a las preguntas del sistema te diga.

Recuerda que, en algunos sistemas, puedes copiar desde el navegador y pegar en el editor cuando te sea cómodo.

A veces el sistema va tomando nota de tus respuestas, para ver si son coherentes con las siguientes. Si tienes que cortar y cierras sin más, tendrías que volver a empezar de cero la próxima vez. Para evitar eso, hay un botón que dice 'Parar' Púlsalo y guardará una cookie con los datos de por donde vas. Para continuar en otra ocasión, tendrás que usar el mismo navegador en el mismo equipo.

Cuando tengas el editor preparado, empieza viendo el enunciado.

Lo que se pide es una macro a la que le pasaremos un conjunto de ficheros y queremos que nos haga una copia de cada uno que tenga el mismo nombre pero con la palabra "orig" delante, en donde hayan desaparecido todas las líneas que tengan el símbolo "<" La llamada podría ser porejemplo

./macro.sh prueba.html tot*.htm

Entonces, tras la llamada, tendríamos una copia de prueba.html llamada origprueba.html en la que habrían desaparecido las líneas con "<" Lo mismo pasaría con todos los ficheros cuyo nombre empiece por tot y acabe en .htm Asegúrate que entiendes el enunciado antes de continuar. Pregunta al profesor si no lo ves claro.

¿Entendido?, pues

Empieza preparando la primera línea de la macro, con #!/bin/bash, y los comentarios que creas oportunos. Vamos con los comandos.

Tenemos que pasar uno a uno, repitiendo la operación de sacar las líneas que no tengan "<". Es decir, necesitamos un ciclo, pero con la salvedad que el patrón no lo sabemos, sino que son todos los que se le pasen a la macro, que pueden ser uno, dos o más.

Vamos a ver cómo se recogen todos los datos.

Plantilla a poner
...$@...
Simplemente, donde vaya la lista de todos los argumentos ponemos $@
Por ejemplo, si queremos copiar todos los ficheros que le pasen a la macro al subdirectorio "aprobados" ¿podríamos hacerlo así:
cp $@ aprobados
O, ¿qué tal:
cp * aprobados
...
O, ¿quizás
cp $1 $2 $3 $4 $5 aprobados
...
El primer caso funciona perfectamente..

El segundo falla totalmente: va a copiar todos los ficheros, no sólo los que le hayan pasado.

El tercero está regular, sólo va a copiar los cinco primeros (si los hay), pero si le pasan más de cinco, el resto no los copiaría.

Por ejemplo, si queremos un recuento de las líneas de todos los archivos que nos han pasado, ¿qué tal estaría:
wc *
Por ejemplo, si queremos juntar todos los archivos que nos han pasado en uno llamado "total", ¿qué tal:
cat $@ >total
Mal: El * a secas son todos los ficheros del directorio, independientemente de los que nos hayan pasado
Bien
En nuestra macro vamos a necesitar un ciclo que recorra todos los ficheros que nos hayan pasado. Pon la cabecera de ese ciclo:
for fich in *
for fich in $
for fich in $@
No, * son todos los del directorio
No, $ a secas no es nada
Dentro del ciclo tienes que sacar las líneas de cada fichero que no tengan ">". Puedes usar el comando fgrep con la opción -v

Cada fichero a filtrar lo vas teniendo en la variable del for y la salida tienes que redirigirla al mismo pero con orig delante.

Con eso ya lo tendrás. Recuerda marcar el ciclo con do y done Pruébala con ficheros que no importa que se destruyan. Si te atascas con algo, consulta al profesor.