X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=grml-tips;h=258c8c03877888ac3748c71641cd6c72bd1dcd3c;hb=691fd5b99dda8c70c8fd5443b4e0e57e29021008;hp=ec790d96d625fb2bc70b2b1356a71bec41798c67;hpb=873c857ff67e6ce682059a758a91549df9cfa9ac;p=grml-tips.git diff --git a/grml-tips b/grml-tips index ec790d9..258c8c0 100755 --- a/grml-tips +++ b/grml-tips @@ -4,7 +4,6 @@ # Authors: grml-team (grml.org), (c) Michael Prokop , (c) Alexander Wirt # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. -# Latest change: Sam Mär 03 15:35:38 CET 2007 [mika] ################################################################################ use strict; @@ -14,6 +13,7 @@ use feature 'say'; use Term::ReadKey; use Time::HiRes; use LWP::UserAgent; +use Getopt::Long; =head1 NAME @@ -21,7 +21,7 @@ B - query a signature file for a specific keyword and display results =head1 SYNOPSIS -B [OPTION] I +B [OPTION] I =head1 DESCRIPTION @@ -35,6 +35,14 @@ This manual page documents briefly the B command. Print this help and exit. +=item B<--tagsonly> + +Match on tags only instead of the whole tip + +=item B<--tipsfile TIPSFILE> + +Use TIPSFILE instead of /usr/share/grml-tips/grml_tips + =back =head1 EXAMPLES @@ -68,20 +76,31 @@ grml-tips was written by Alexander Wirt =cut my $grml_tips = '/usr/share/grml-tips/grml_tips'; + +my $help; +my $tagsonly; +my $tipsfile; + +my $result = GetOptions ( + "help" => \$help, + "tagsonly" => \$tagsonly, + "tipsfile=s" => \$grml_tips, +); + my $pattern = shift; -if ( $pattern eq '' ) { - pod2usage( - { -message => 'No search pattern provided', - -exitval => -1, - } - ); -} -elsif ( $pattern eq '--help' ) { - pod2usage(); -} +#help if pattern is missing; +pod2usage( + { -message => 'No search pattern provided', + -exitval => -1, + } +) unless $pattern; + +#help if help is wanted +pod2usage() if $help; my @tips; + if ( !open( my $fh, '<', "$grml_tips" ) ) { say STDERR "Error: File \"$grml_tips\" not found."; say STDERR "Exiting."; @@ -96,19 +115,26 @@ else { $tip .= $line; } else { - $tips_found++; - if ( $tip =~ /$pattern/mi ) { - - #$tip .= $line; + my $header = "Grml Tip Number $tips_found\n"; + my $line = "-" x ( length($header) - 1 ) . "\n\n"; - my $header = "Grml Tip Number $tips_found\n"; - my $line = "-" x ( length($header) - 1 ) . "\n\n"; - - push @tips, $header . $line . $tip . "\n"; - $tip = ''; - } - else { + $tips_found++; + if ($tagsonly) { + #extract tags from tip + my ($tag) = $tip =~ /^Tags: (.*)$/m; + my @tags = split(/[, ]+/, $tag); + if (grep(/^$pattern$/i, @tags) ) { + push @tips, $header . $line . $tip . "\n"; + } $tip = ''; + } else { + if ( $tip =~ /$pattern/mi ) { + push @tips, $header . $line . $tip . "\n"; + $tip = ''; + } + else { + $tip = ''; + } } } }