Man pages are displayed on $PAGER, so you get your choice. The default is more or less. I use pg when i can get it. However, pager regex rules are a bit kinky.
Beyond what the more or less man page says about pattern searching and moving forward and, if you have a file input, backward:
The man pages have teletype print artifacts in them like "_\ba" for underscored "a" and "c\bc" for bold "c" (\b is backspace to overstrike). You can write a sed routine to flush out the .\b or you can use a web man page.
sed '
s/\(.\)\^H\1/\1/g
s/\(.\)\^H\1/\1/g
s/\(.\)\^H\1/\1/g
s/\(.\)\^H_/\1/g
s/_\^H\(.\)/\1/g
s/.\^H\(.\)/\1/g
'|sed '
/^$/{
:l
$b
N
s/^\n$//
t l
}
'
or in C:
$ cat mysrc/manclean.c
#include <stdio.h>
static void p_putchar( int c )
{
if ( c != EOF
&& EOF == putchar( c ) )
{
if ( ferror( stdout ) )
{
perror( "stdout" );
exit( 1 );
}
exit( 0 );
}
}
main()
{
static int c ;
static int c2 ;
static int c3 ;
static int ct = 0 ;
do
{
switch( c = getchar() )
{
case EOF:
if ( ferror( stdin ) )
{
perror( "stdin" );
}
continue ;
case '\b':
if ( ct < 2 )
{
ct = 0 ;
continue ;
}
c2 = c3 ;
ct = 1 ;
continue ;
case '\n':
if ( ct > 1
&& c3 == '\n'
&& c2 == '\n' )
{
ct = 2 ;
continue ;
}
/* intentional fall through */
default:
break ;
}
switch( ++ct )
{
case 1:
c2 = c ;
continue ;
case 2:
break ;
default:
p_putchar( c3 );
break ;
}
c3 = c2 ;
c2 = c ;
} while ( c != EOF );
switch( ct )
{
case 0:
break ;
case 1:
p_putchar( c2 );
default:
p_putchar( c3 );
p_putchar( c2 );
break ;
}
exit( 0 );
}