seq 1000 | sed 's/.*/@float Figure,fig:&\
@cindex \
@image{&,9cm}.\
@caption{}\
@end float\
/'
de uma maneira tradicional do Unix (veja como seq
e sed
são executados ao mesmo tempo e cooperam com a tarefa).
Eu preciso de um script que produza a seguinte saída muitas vezes
@float Figure,fig:n
@cindex
@image{n,9cm}.
@caption{}
@end float
mas onde n (as duas vezes) é substituído por 1, 2, 3, até um grande número.
Obrigado.
Tente:
$ for n in {1..10}; do printf '@float Figure,fig:%s
> @cindex
> @image{%s,9cm}.
> @caption{}
> @end float
> ' ${n} ${n}; done
Ou como uma linha:
for n in {1..10}; do printf '@float Figure,fig:%s@cindex\n@image{%s,9cm}.\n@caption{}\n@end float\n' ${n} ${n}; done
O texto acima é impresso 10 vezes, sem linhas vazias entre cada grupo. Altere o 10
nas chaves para números diferentes. Adicione outro \n
no final da declaração printf
longa para uma linha vazia.
Você pode usar um loop com expansão de chaves e de várias maneiras de produzir saída. Vou usar um documento aqui :
for n in {1..100}
do
cat <<EOT
@float Figure,fig:$n
@cindex
@image{$n,9cm}.
@caption{}
@end float
EOT
done
Isso faz um loop sobre valores de n
de 1 a 100 e imprime esse texto para cada um, com os valores apropriados de n
substituídos a cada vez.
Se você não tiver o Bash, seq 1 100
terá o mesmo efeito que a expansão da chave; sem isso, um loop normal:
i=0; while [ $i -lt 100 ] ; do ... ; i=$((i + 1)) ; done
terá o mesmo efeito um pouco menos conciso.
Tags shell-script