Você só precisa alterar sua expressão regular para que as tags HTML sejam excluídas. Como você está usando expressões regulares compatíveis com Perl, é possível usar \K
, o que significa "descartar qualquer coisa correspondente a este ponto |" para descartar o <BODY>
e uma lookahead positiva para descartar o </BODY>
. Você também pode usar expansões de chaves em vez da mais difícil sintaxe for((var=0;var<=lim;var++))
:
for x4 in {0..4}; do
for x3 in {0..4}; do
for x2 in {0..4}; do
for x1 in {0..4}; do
curl "http://www.artemiosv.info/21.php?p1=$x1;p2=$x2;p3=$x3;p4=$x4" 2>/dev/null |
grep -oP '<BODY>\K[\s\S]*(?=</BODY>)'
done
done
done
done
Ou, se você quer o conteúdo HTML e os valores de suas 4 variáveis, use isto:
for x4 in {0..4}; do
for x3 in {0..4}; do
for x2 in {0..4}; do
for x1 in {0..4}; do
printf '%s : %s\n' "$x1 $x2 $x3 $x4" \
"$(curl "http://www.artemiosv.info/21.php?p1=$x1;p2=$x2;p3=$x3;p4=$x4" 2>/dev/null |
grep -oP '<BODY>\K[\s\S]*(?=</BODY>)')"
done
done
done
concluído
Note que também removi o eval
, pois isso não estava fazendo nada útil. Você só precisa redirecionar o stderr.
Por fim, você também pode enviar os comandos curl
para o segundo plano para poder executar muitos em paralelo. Estes não são comandos muito pesados, portanto, sua máquina deve ser capaz de lidar com eles e isso irá acelerar o script significativamente. Basta adicionar um &
no final da linha printf ...
:
printf '%s : %s\n' "$x1 $x2 $x3 $x4" \
"$(curl "http://www.artemiosv.info/21.php?p1=$x1;p2=$x2;p3=$x3;p4=$x4" 2>/dev/null |
grep -oP '<BODY>\K[\s\S]*(?=</BODY>)')" &
Observe, no entanto, que o site do qual você está tentando fazer o download parece ter problemas para lidar com várias solicitações consecutivas. Mesmo quando não executado em paralelo, algumas solicitações retornam vazias (e funcionam se executadas manualmente) e, quando executadas em paralelo, o número de resultados vazios é multiplicado. Você pode querer falar com seu professor sobre como corrigir isso.