시스템에서 사용자의 실패한 모든 로그인을 포함하는 로그 파일의 형식을 지정하는 작은 스크립트가 있습니다. 데이터를 다음 형식의 텍스트 파일로 출력하는 스크립트를 작성했습니다(두 개의 열, 첫 번째는 실패한 로그인 시도 횟수이고 두 번째는 사용자입니다).
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>"