Sometimes you will need to observe changes from a file that should match a regex. The above script can do this for you.
I haven’t yet worked out how to do this without a temp file, but here is a script that demonstrates a functional grep-filtered less +F (which cleans up its temp file). I call it lessf.
One of the key elements is the –line-buffered argument to grep that permits tail output to continue to flow through the pipeline (the unbuffer command provided by expect provides similar functionality for any program).
#!/bin/sh LOGFILE=$1 shift PATTERN=$@ 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
Example usage:
lessf /var/log/system.log foobar lessf /var/log/system.log -v nobar