システム上のユーザーのすべての失敗したログインでログファイルをフォーマットする小さなスクリプトがあります。この形式でテキストファイルにデータを出力するスクリプトを作成しました(最初のログイン試行の失敗回数と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...
このソリューションは正しい出力を提供しますが、このソリューションが煩雑であることを除けば、ファイルの行数がハードコーディングされたものと異なる場合、大きな欠陥が存在し、表示されません。
何か助けていただければ幸いです!これは宿題です。
思ったより簡単です:
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>"