Formatando o arquivo na saída HTML

3

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.

    
por Sharrison 15.09.2017 / 19:33

2 respostas

2

É 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>"
    
por 15.09.2017 / 19:49
1

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>"
    
por 15.09.2017 / 21:47