Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Grep'ping on Unix without perl-compatible gnu grep - can you do it better?

by Tommy (Chaplain)
on Feb 01, 2013 at 02:15 UTC ( #1016422=perlquestion: print w/ replies, xml ) Need Help??
Tommy has asked for the wisdom of the Perl Monks concerning the following question:

Are you forced to use a system grep without perl-compatible regex support? (i.e.- no "-P")

Let's say you want to grep a file for "foo", but not if it's proceeded by a comment "#" (with possible, legal leading whitespace). How would you grep for that on Unix with it's lame grep?

I turn to Perl. Can it be done without perl in one grep? Can this be done in Perl, but more simply? Show me!

Meanwhile, at the shell...

[[ "$( cat filename | perl -e 'print for grep { /^[[:space:]]{0,}#.+?f +oo/ } <>' )" != "" ]] && found_but_commented=1;

I guess I'm looking for a re-usable perl-construct to use as a grep substitute. Something along those lines above. Is there anything more easy than | perl -e 'print for grep { /regex/ } <>


Tommy
A mistake can be valuable or costly, depending on how faithfully you pursue correction

Comment on Grep'ping on Unix without perl-compatible gnu grep - can you do it better?
Select or Download Code
Replies are listed 'Best First'.
Re: Grep'ping on Unix without perl-compatible gnu grep - can you do it better?
by roboticus (Chancellor) on Feb 01, 2013 at 02:31 UTC

    Tommy:

    I'd do it like this:

    $ grep -E '^[^#]*foo' boom now is the foo for all $ cat boom now is the foo for all now # foo is the blarg

    ...roboticus

    When your only tool is a hammer, all problems look like your thumb.

      Indeed, the -E switch (aka egrep) does activate a modern regexp syntax, and is found in a boatload more systems than where -P is. It does not come with all the Perl features, but it is way more comfortable than the basic 1980s dialect grep & co default to.
        You could (have) try(ied) awk on systems that has(had) a lacking grep.
Re: Grep'ping on Unix without perl-compatible gnu grep - can you do it better?
by kielstirling (Scribe) on Feb 01, 2013 at 02:35 UTC
    perl -ne 'print if !/^#/ and /foo/' /tmp/foo.txt
    is that what you want? Or using the regex for the above post
    perl -ne 'print if /^[^#]*foo/' /tmp/foo.txt

      Very nice...except you still have to account for potential preceeding whitespace before the hashmark /^[[:space:]]{0,}#/

      Tommy
      A mistake can be valuable or costly, depending on how faithfully you pursue correction
Re: Grep'ping on Unix without perl-compatible gnu grep - can you do it better?
by Tux (Monsignor) on Feb 01, 2013 at 07:37 UTC

    Install App::Ack ?


    Enjoy, Have FUN! H.Merijn

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1016422]
Approved by kcott
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (10)
As of 2015-07-28 09:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (254 votes), past polls