在 HTML 输出中格式化文件

在 HTML 输出中格式化文件

我有一个小脚本,它将格式化一个日志文件,其中包含系统上用户的所有失败登录。我编写了脚本,以这种格式将数据输出到文本文件中(两列,第一列是登录尝试失败的次数,第二列是用户):

1,325 Unknown  
505 root   
17 adm  
16 ftp  
etc...  

我需要以这种方式在控制台上以 HTML 输出格式化该文件(文件中的每一行都打印在 html 换行符上):

<html>
<body><h1>Failed Login Attempts</h1> 
<br />1,325 Unknown 
<br />505 Root 
<br />17 adm 
etc....
</body>
</html>

我目前所做的是将文件保存到一个变量中,然后将该变量放入 html 中,如下所示:

file=$(cat finalo) #file name is finalo
#print to console
echo "
<html>
<body><h1>Failed Login Re...</h1>
<br />$file
</body>
</html>"

输出将整个文件内容显示在一个html <br />.我的问题是如何让文件中的每一行打印在每一行上<br />

我尝试读取文件的每个特定行,将其保存到一个变量中,然后在每一<br />行上使用该变量,如下所示:

line1=$(sed -n '1p' < finalo)
line2=$(sed -n '2p' < finalo)
line3=$(sed -n '3p' < finalo)

和:

<html>
<body><h1>Failed Login Report</h1>
<br />$line1
<br />$line2
<br />$line3
etc...

这个解决方案给了我正确的输出,但是,除了这个解决方案很混乱之外,如果文件的行数与硬编码的行数不同,则存在一个主要缺陷,它将不会显示。

任何帮助,将不胜感激!顺便说一句,这是作业。

答案1

这比你想象的要容易:

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>"

答案2

您还可以使用while

#!/bin/bash
echo "
<html>
<body><h1>Failed Login Attempt</h1>"
while read line
do
    echo "<br />$line"
done < file
echo "</body>
</html>"

或者用一个函数

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>"

相关内容