bash usando grep y sed

bash usando grep y sed

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 $NAMESse le asigna un valor. El valor se toma como resultado del comando entre comillas (consulte Sustitución de comandos en man bash). $1es 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 lscomando 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 bashpara 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.

información relacionada