bash usando grep e sed

0

Isto é para a nossa prac semanal, sem marcação ou nota (nem sequer obtemos as respostas!)

Eu realmente aprecio se alguém tiver tempo para me ajudar a explicar este exercício, já que estou tentando fazer esse trabalho no fim de semana e não vou conseguir ajuda do meu tutor até a próxima semana. . Eu tenho feito muita leitura e trabalho cobrindo bash programming, regex e grep. Mas o código abaixo me deixou desconcertado.

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

Especificamente, o seguinte está me impedindo de entender a coisa toda:

NAMES='ls *.$1'

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

Exercício 4.3
Suponha que você receba um arquivo de texto (chamado myfile) 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 os resultados

    
por user65751 10.05.2014 / 14:59

1 resposta

1

NAMES='ls *.$1'

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

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

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

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

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

BTW, a linha de movimento provavelmente deve ser

mv $file $filed

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

    
por 10.05.2014 / 15:14