Esto es para nuestra práctica semanal, sin calificaciones ni calificaciones (¡ni siquiera obtenemos las respuestas!)
Realmente agradecería que alguien tuviera tiempo para ayudarme a explicarme este ejercicio, ya que estoy tratando de terminar este trabajo durante el fin de semana y no podré recibir ayuda de mi tutor hasta la próxima semana. He estado leyendo y trabajando mucho sobre programación bash, expresiones regulares y grep. Pero el siguiente código me tiene desconcertado.
Incluso me pregunto: ¿las instrucciones están incompletas o simplemente no las entiendo?
Específicamente, lo siguiente me impide entender todo el asunto:
NAMES=`ls *.$1`
filed=$(file:$1).$2
Ejercicio 4.3
Suponga que se le proporciona un archivo de texto (llamado miarchivo) que contiene lo siguiente
#!/bin/bash
NAMES=`ls *.$1`
for file in $NAMES; do
filed=$(file%:$1).$2
mv file filed
done
Ejecute los siguientes comandos $ grep 'archivo' miarchivo
$ grep 'file*' myfile
$ grep '^ *file*' myfile
$ grep 'file$' myfile
$ sed 's/ file* / script /g' myfile
$ sed ' /for/,/files/d' myfile
$ sed '/\$[A-Z]..[A-Z]*/d' myfile
Luego explique el resultado o resultados.
Respuesta1
NAMES=`ls *.$1`
Esta es una tarea. A la variable $NAMES
se le asigna un valor. El valor se toma como resultado del comando entre comillas (consulte Sustitución de comandos en man bash
). $1
es un parámetro especial, corresponde al primer argumento del script. Entonces, parece que el script debe ejecutarse con una extensión como parámetro (por ejemplo ./script.sh txt
), la salida del ls
comando se almacenará en la variable.
filed=$(file%:$1).$2
Esto es realmente extraño. ¿Estás seguro de que los paréntesis no eran llaves, de hecho? Y también debería haber un .
en lugar de :
.
filed=${file%.$1}.$2
${var%pattern}
corta el patrón desde el final de la variable. Consulte Expansión de parámetros man bash
para obtener más detalles. Entonces, en este caso, elimina el punto más la extensión dada por el primer parámetro y agrega un punto y el segundo parámetro.
Por cierto, la línea de movimiento probablemente debería ser
mv $file $filed
de lo contrario no habría razón para utilizar un bucle.