Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

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
Replies are listed 'Best First'.
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?

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

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (4)
As of 2016-05-01 03:22 GMT
Find Nodes?
    Voting Booth?
    :nehw tseb si esrever ni gnitirW

    Results (441 votes). Check out past polls.