我需要一个脚本,将日志文件转换为易于查看的.html文件,可由“任何人”访问。
这是我到目前为止所知道的:
#!/bin/bash
## The purpose of this script is to create .html files from log files, with the ability to optionally GREP for certain strings
if [ "$2" == "" ];
then
echo "Usage : $0 [Source Log file] [Output HTML file] [String to grep (if applicable)]"
exit 255
fi;
LOGFILE=$1
OUTPUTFILE=$2
GREPSTRING=$3
if [ "$3" == "" ];
then
echo "Cat'ing $LOGFILE to $OUTPUTFILE"
LOGCONTENTS=`cat $LOGFILE`
else
echo "Grep'ing for $GREPSTRING in $LOGFILE"
LOGCONTENTS=`grep --color $GREPSTRING $LOGFILE | sed -e "s/^.*$/&1\n/"`
fi;
# Below is the html heading which will be appended to the final .html file
HEADING="<html><body><h1>Log output for: $LOGFILE</h1>"
# Below is the end of the html file
END="</body></html>"
# Below all the prepared variables are stitched together to the OUTPUT/LOG FILE
echo $HEADING > $OUTPUTFILE
echo $LOGCONTENTS >> $OUTPUTFILE
echo $END >> $OUTPUTFILE
# For debugging, enable the lines below
echo $LOGCONTENTS
echo "Done preparing $OUTPUTFILE"
我的问题是,无论我使用多少CAT、GREP、SED等命令,输出都不会保留换行符。输出文件在执行正常的尾部-f或cat时,看起来或多或少与之类似是很重要的。
发布于 2013-09-25 04:34:23
这里有一个重要的重构,而不是将内容复制到变量中(然后错误引用它们)。
#!/bin/sh
exec >"$2"
cat <<HERE
<html><body><h1>Log output for: $1</h1>
<pre>
HERE
grep "${3:-^}" "$1"
echo '</pre></body></html>'
因为超文本标记语言不能显示终端颜色代码,所以我去掉了--color
选项。如果你有一个合适的过滤器来转换成HTML颜色标签,那么一定要把它扔进去。
还要注意,如果不提供第三个命令行参数,正则表达式将缺省为匹配所有行的一个。
许多浏览器会将单独的开始<pre>
标记呈现为一个不吸引人的空行,但在这里几乎不需要解决这个问题。如果它困扰你,那就把它分解成一个单独的echo -n '<pre>'
。
发布于 2013-09-25 04:21:03
由于您要使用HTML语言,因此需要将换行符(使用sed
或其他语言)替换为<br/>
( HTML换行符)。HTML通常会忽略自由流动文本中的CR/LF字符。
所以你可以使用sed
,如下所示。我移除了1
,因为没有解释它们的用途,但如果需要,您可以将它们放回原处。
if [ "$3" == "" ];
then
echo "Cat'ing $LOGFILE to $OUTPUTFILE"
LOGCONTENTS=`sed -e "s/^.*$/&<br\/>/" $LOGFILE`
else
echo "Grep'ing for $GREPSTRING in $LOGFILE"
LOGCONTENTS=`grep --color $GREPSTRING $LOGFILE | sed -e "s/^.*$/&<br\/>/"`
fi;
https://stackoverflow.com/questions/18991126
复制相似问题