123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #!/usr/local/bin/perl -w
- # infosrch does a regex search on an info manual.
- # By Harry Putnam <reader@newsguy.com>.
- ($myscript = $0) =~ s:^.*/::;
- $six = '';
- if($ARGV[0] eq "help"){
- &usage;
- exit;
- }
- if($ARGV[0] eq "-e"){
- shift;
- $six = "true";
- }
- if(!$ARGV[1]){
- &usage;
- exit;
- }
- $target = shift;
- $regex = shift;
- $shell_proc = "info --output - --subnodes 2>/dev/null $target";
- open(SHELL_PROC," $shell_proc|");
- while(<SHELL_PROC>){
- chomp;
- push @lines,$_;
- }
- close(SHELL_PROC);
- $cnt = 0;
- for(@lines){
- if(/$regex/ && !$six){
- print "$target\n $lines[($cnt-1)]\n<$cnt> $lines[$cnt]\n $lines[($cnt+1)]\n";
- print "-- \n";
- }elsif(/$regex/ && $six){
- print "$target\n";
- if($lines[($cnt-6)]){
- print " $lines[($cnt-6)]\n";
- }
- if($lines[($cnt-5)]){
- print " $lines[($cnt-5)]\n";
- }
- if($lines[($cnt-4)]){
- print " $lines[($cnt-4)]\n";
- }
- if($lines[($cnt-3)]){
- print " $lines[($cnt-3)]\n";
- }
- if($lines[($cnt-2)]){
- print " $lines[($cnt-2)]\n";
- }
- if($lines[($cnt-1)]){
- print " $lines[($cnt-1)]\n";
- }
- if($lines[$cnt]){
- print "$cnt $lines[$cnt]\n";
- }
- if($lines[($cnt+1)]){
- print " $lines[($cnt+1)]\n";
- }
- if($lines[($cnt+2)]){
- print " $lines[($cnt+2)]\n";
- }
- if($lines[($cnt+3)]){
- print " $lines[($cnt+3)]\n";
- }
- if($lines[($cnt+4)]){
- print " $lines[($cnt+4)]\n";
- }
- if($lines[($cnt+5)]){
- print " $lines[($cnt+5)]\n";
- }
- if($lines[($cnt+6)]){
- print " $lines[($cnt+6)]\n";
- }
- print "-- \n";
- }
- $cnt++;
- }
- sub usage {
- print <<EOM;
- Purpose: Extract full text from info node and search it by regex
- Usage: $myscript [-e] TARGET REGEX
- Where TARGET is an info node such as `emacs', `bash' etc, and
- REGEX is what you want to find in it.
- The -e flag is not required but if used then 6 lines preceding and six
- lines following any hits will be printed. The default (with no -e flag)
- is to print one line before and after.
- The output has the line number prepended to the line containing the
- actual regex.
- Info command used:
- info --output - --subnodes 2>/dev/null TARGET
- EOM
- }
|