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