2009-11-19 3 views
5

"less -iS + F service.log" に、特定のパターンに一致する行に表示を制限します。 less + Fのフィルタ機能

私は動作しません

less +F service.log | grep <pattern> | less +F 

のようなものを試してみました。また

cat < service.log | grep <pattern> | less +F 

私がしたいことはしません。入力がすでに閉じられているように見えますが、 以下では変更が表示されません。

特定のパターンに一致する行に表示を制限するにはどうすればよいですか?

答えて

0
tail -f service.log | grep <pattern> 
+0

おかげで、これはまさに私が欲しいものではありませんけれども。 "less"機能、つまり結果の出力内でスクロール、検索、ハイライトを使用したいと考えています。 「tail -f service.log | grep | less + F」のようなものは残念ながらそれをしません。 – axelrose

0

ソリューションは、単に

LESSOPEN='|grep <pattern> %s' less +F service.log 

に見えたが、あまり成長して、ログファイルから新しい行を読み取るために続行されません。

1

あなたは、各行はプロセスのカップルを産卵し、取りこわし気にしない場合は、ループ

tail -f filename.log|while read line; do echo $line | grep pattern; done 
1

は、私はまだ一時ファイルを使用せずにこれを行う方法を働いていないながら読み取りを使用していますが、ここには、機能grep-フィルタリングless +F(その一時ファイルをクリーンアップする)を示すスクリプトがあります。私はそれをlessfと呼びます。

重要な要素の一つは、(expectによって提供unbufferコマンドは、任意のプログラムのために同様の機能を提供する)、パイプラインを通って流れ続けることをtail出力を許可grepから--line-buffered引数です。

#!/bin/sh 
LOGFILE=$1 
shift 
[email protected] 
TEMP_DIR=/tmp/lesstmp 
TEMP_FILE="$TEMP_DIR/$(basename $LOGFILE)" 
[ ! -d $TEMP_DIR ] && mkdir $TEMP_DIR 
trap 'rm -rf "$TEMP_DIR"; exit' INT TERM EXIT 
(tail -f "$LOGFILE" | grep --line-buffered $PATTERN) > "$TEMP_FILE" | less +F "$TEMP_FILE" 
trap - INT TERM EXIT 

使用例:私の質問を熟考ため

lessf /var/log/system.log foobar

lessf /var/log/system.log -v nobar

関連する問題