當用例如「less -iS + F service.log」我想要 將顯示限制爲匹配特定模式的行。過濾功能少於+ F
我想是這樣
less +F service.log | grep <pattern> | less +F
不工作。另外
cat < service.log | grep <pattern> | less +F
不做我想要的。它看起來像輸入已經關閉,並且 更少不顯示更改。
如何限制顯示爲符合特定模式的行?
當用例如「less -iS + F service.log」我想要 將顯示限制爲匹配特定模式的行。過濾功能少於+ F
我想是這樣
less +F service.log | grep <pattern> | less +F
不工作。另外
cat < service.log | grep <pattern> | less +F
不做我想要的。它看起來像輸入已經關閉,並且 更少不顯示更改。
如何限制顯示爲符合特定模式的行?
tail -f service.log | grep <pattern>
的解決方案似乎只是
LESSOPEN='|grep <pattern> %s' less +F service.log
但少不繼續讀從不斷增長的日誌文件中的新線路。
如果你不介意的產卵和拆除幾個過程的每一行,使用讀while循環
tail -f filename.log|while read line; do echo $line | grep pattern; done
我還沒有制定出如何做到這一點沒有一個臨時文件,但這是一個腳本,演示功能grep
- 過濾less +F
(清理其臨時文件)。我稱之爲lessf
。
一個關鍵要素是--line-buffered
參數grep
允許tail
輸出繼續通過管道流(由所述提供expect
命令unbuffer
提供類似的功能對任何程序)。
#!/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
感謝思考我的問題,雖然這不正是我想要的。 我希望在結果輸出中具有「少」功能,即滾動,搜索,高亮。 像 「尾巴-f service.log | grep的 |少+ F」,這unfortunalely沒有做到這一點。 –
axelrose
2009-11-19 11:28:46