2

ログ ファイルを、「誰でも」アクセスできる、見やすい .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 などでいくら遊んでも、出力で改行が保持されないことです。通常の tail -f または cat を実行するときとほぼ同じように出力ファイルを表示することが不可欠です。

4

4 に答える 4

4

ものを変数にコピーする (そしてそれらを誤って引用する) 代わりに、ここでは重要なリファクタリングを行います。

#!/bin/sh
exec >"$2"
cat <<HERE
<html><body><h1>Log output for: $1</h1>
<pre>
HERE
grep "${3:-^}" "$1"
echo '</pre></body></html>'

どうせ HTML は端末のカラーコードを表示できないので、--colorオプションを外しました。HTML カラータグに変換するための適切なフィルターがある場合は、ぜひそれを投入してください。

3 番目のコマンドライン引数を指定しない場合、正規表現はデフォルトですべての行に一致するものになることにも注意してください。

多くのブラウザーは、単独の開始<pre>タグを見栄えの悪い空行としてレンダリングしますが、ここでそれを修正することはほとんど重要ではありません。echo -n '<pre>'気になるようでしたら分割してください。

于 2013-09-24T20:34:23.060 に答える
2

sedHTML を使用するので、改行文字 (またはその他を使用) を HTML 改行に置き換える必要があります<br/>。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;
于 2013-09-24T20:21:02.987 に答える