bash usando grep e sed

bash usando grep e sed

Isto é para o nosso treino semanal, sem notas ou notas (nem obtemos as respostas!)

Eu realmente apreciaria se alguém tivesse tempo para me ajudar a explicar este exercício, pois estou tentando fazer este trabalho no fim de semana e não poderei obter ajuda do meu tutor até a próxima semana. Tenho lido e trabalhado muito cobrindo programação bash, regex e grep. Mas o código abaixo me deixou perplexo.

Estou até me perguntando: as instruções estão incompletas ou simplesmente não estou entendendo?

Especificamente, o seguinte está me impedindo de entender tudo:

NAMES=`ls *.$1`

filed=$(file:$1).$2

Exercício 4.3
Suponha que você receba um arquivo de texto (chamado meuarquivo) contendo o seguinte

#!/bin/bash

NAMES=`ls *.$1`

for file in $NAMES; do
    filed=$(file%:$1).$2
    mv file filed
done

Execute os seguintes comandos $ grep 'file' myfile

 $ 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

Em seguida, explique a saída ou resultados

Responder1

NAMES=`ls *.$1`

Esta é uma tarefa. A variável $NAMESrecebe um valor. O valor é considerado a saída do comando entre crases (consulte Substituição de comandos em man bash). $1é um parâmetro especial, corresponde ao primeiro argumento do script. Portanto, parece que o script deve ser executado com uma extensão como parâmetro (por exemplo ./script.sh txt), a saída do lscomando será armazenada na variável.

filed=$(file%:$1).$2

Isso é realmente estranho. Tem certeza de que os parênteses não eram chaves, na verdade? E também deveria haver um .em vez de :.

filed=${file%.$1}.$2

${var%pattern}corta o padrão do final da variável. Consulte Expansão de parâmetros man bashpara obter detalhes. Então, neste caso, retira o ponto mais a extensão dada pelo primeiro parâmetro e adiciona um ponto e o segundo parâmetro.

Aliás, a linha de movimento provavelmente deveria ser

mv $file $filed

caso contrário, não haveria razão para usar um loop.

informação relacionada