web-dev-qa-db-ja.com

HTML出力でのファイルのフォーマット

システム上のユーザーのすべての失敗したログインでログファイルをフォーマットする小さなスクリプトがあります。この形式でテキストファイルにデータを出力するスクリプトを作成しました(最初のログイン試行の失敗回数と2番目のユーザーの2つの列):

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

出力は、1つの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...

このソリューションは正しい出力を提供しますが、このソリューションが煩雑であることを除けば、ファイルの行数がハードコーディングされたものと異なる場合、大きな欠陥が存在し、表示されません。

何か助けていただければ幸いです!これは宿題です。

2
Sharrison

思ったより簡単です:

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
xhienne

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