OS/2 grep had a great feature where it would show you n lines BEFORE the search item was found. Is there an equivalent in unix anywhere?

You can get GNU grep and it's dependencies for Solaris from sunfreeware.com either as a binary download in pkg format which installs in /usr/local/bin or as a source package.


As far as GNU grep go, this will show you the number of lines before the match:

# grep -B number

Equivilent for after:

# grep -A number

You can download GNU Grep here: http://www.gnu.org/s/grep/


A small awk script will also work:

#!/usr/bin/awk -f
BEGIN { context=3; }
{ add_buffer($0) }
/pattern/ { print_buffer() }
function add_buffer(line)
{
    buffer[NR % context]=line
}
function print_buffer()
{
    for(i = max(1, NR-context+1); i <= NR; i++) {
        print buffer[i % context]
    }
}
function max(a,b)
{
    if (a > b) { return a } else { return b }
}

replace /pattern/ with the actual regular expression or pattern to search for.