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 $NAMES
recebe 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 ls
comando 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 bash
para 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.