Sed

在 HTML 輸出中格式化文件

  • September 18, 2017

我有一個小腳本,它將為系統上的使用者格式化一個包含所有失敗登錄的日誌文件。我編寫了腳本以這種格式在文本文件中輸出數據(兩列第一列是失敗的登錄嘗試次數,第二列是使用者):

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

這個解決方案給了我正確的輸出,但是,除了這個解決方案很混亂之外,如果文件的行數與硬編碼的行數不同,則存在一個主要缺陷,它將不會顯示。

任何幫助,將不勝感激!這是家庭作業。

這比你想像的要容易:

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

您還可以使用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>"

引用自:https://unix.stackexchange.com/questions/392505