Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: Use Unix command in Perl

by SimonClinch (Chaplain)
on May 25, 2011 at 09:24 UTC ( #906619=note: print w/ replies, xml ) Need Help??


in reply to Use Unix command in Perl

According to perlop, "a string enclosed by backticks (grave accents) first undergoes double-quote interpolation". This suggests doing something like:

my $shcom = 'gzgrep "00380-1037" ./paz0*/home/fdm*/logs/*CYUTI*21* | g +rep "isTempDisabled Y"'; my $grepped = `$shcom`;

One world, one people


Comment on Re: Use Unix command in Perl
Download Code
Re^2: Use Unix command in Perl
by chrestomanci (Priest) on May 25, 2011 at 11:29 UTC

    soubalaji does not need double quote interpolation, as there are no perl variables that might need expansion embedded in his command string.

    Instead he needs glob expansion. ./paz0*/home/fdm*/lo­gs/*CYUTI*21* presumably expands to a long list of matching files, which he wants to filter with gzgrep(*). Running a command via backticks ought to invoke a shell to do the expansion, however as I recall the shell invoked is sh which has few features compared with bash or the like.

    If it where me, I would implement the whole thing in perl, that is use glob or File::Glob to expand the glob patten to a list of files, then open each through a zcat filter searching for matching lines.

    Alternatively, soubalaji could use perl to expand the glob, feed that list into gzgrep, and then capture and filter the output. Something like:

    my @file_list = glob './paz0*/home/fdm*/lo­gs/*CYUTI*21*'; my $command = 'gzgrep "00380-1037" ".join(' ',@file_list); open my $cmdFH, '-|', $command or die "Error running gzgrep $!"; my @matches = {grep qr/isTempDisabled Y/} <$cmdFH>; close $cmdFH; print @matches;

    Note that the second use of grep is the internal perl function, and it is used to filter the list of matching lines that we get when the filehandle on the gzgrep command is called in an array context.

    (*) could gzgrep be a typo? On my system the command to grep gzip compressed files is zgrep

      I didn't offer the interpolation as a suggestion and your definition of it is insufficient - otherwise he wouldn't be having the problem in the first place.

      One world, one people

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (7)
As of 2014-12-27 21:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (177 votes), past polls