É mais fácil do que você pensa:
echo "
<html>
<body><h1>Failed Login Attempts</h1>"
# The following line prepends <br /> before each line in finalo
sed 's|^|<br />|' finalo
echo "
</body>
</html>"
Eu tenho um pequeno script que formata um arquivo de log com todos os logins com falha para usuários no sistema. Eu escrevi o script para produzir os dados em um arquivo de texto nesse formato (duas colunas com o número de tentativas de login com falha no primeiro e o usuário no segundo):
1,325 Unknown
505 root
17 adm
16 ftp
etc...
Eu preciso deste arquivo formatado na saída HTML no console dessa maneira (cada linha no arquivo deve ser impressa em uma quebra de linha html):
<html>
<body><h1>Failed Login Attempts</h1>
<br />1,325 Unknown
<br />505 Root
<br />17 adm
etc....
</body>
</html>
O que eu faço atualmente é salvar o arquivo em uma variável e colocar essa variável no html da seguinte forma:
file=$(cat finalo) #file name is finalo
#print to console
echo "
<html>
<body><h1>Failed Login Re...</h1>
<br />$file
</body>
</html>"
A exibição de saída é o conteúdo inteiro do arquivo em um html <br />
. Minha pergunta é como posso obter cada linha no arquivo para imprimir em cada <br />
?
Eu tentei ler cada linha específica do arquivo, salvando-a em uma variável e, em seguida, usando essa variável em cada linha <br />
da seguinte forma:
line1=$(sed -n '1p' < finalo)
line2=$(sed -n '2p' < finalo)
line3=$(sed -n '3p' < finalo)
E:
<html>
<body><h1>Failed Login Report</h1>
<br />$line1
<br />$line2
<br />$line3
etc...
Esta solução me dá a saída correta, no entanto, além dessa solução ser confusa, existe uma grande falha se o arquivo tiver uma quantidade diferente de linhas que as codificadas, ele não será exibido.
Qualquer ajuda seria apreciada! Esta é a lição de casa.
Você também pode usar um while
#!/bin/bash
echo "
<html>
<body><h1>Failed Login Attempt</h1>"
while read line
do
echo "<br />$line"
done < file
echo "</body>
</html>"
Ou com uma função
function r_lines()
{
while read line
do
echo "<br />$line"
done < file
return $line
}
echo "
<html>
<body><h1>Failed Login Attempts</h1>
$(r_lines)
</body>
</html>"
Tags sed html scripting text-formatting