Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

sed in perl

by GauCho (Initiate)
on Nov 11, 2019 at 10:22 UTC ( #11108547=perlquestion: print w/replies, xml ) Need Help??

GauCho has asked for the wisdom of the Perl Monks concerning the following question:

Hi All, i have a problem with using sed in a perl script. Requirement: Read a csv file (file1) containing certain pattern, match the pattern in another text file (file2) and delete it where ever its occurring.

file1:

abc/def sde/dfg/htf

file2:

abc/def = 100 sde/dfg/htf = 230 dad/fry = 000

in the end only dad/fry = 000 should remain in file2.

I cannot install any package, so have to use the default perl options.

Since my file1 contains special character "/" , i have escaped it in my code.

my sed command is working fine if I try to run it without loop, i.e for one pattern only. As soon as I add it in loop, it fails.

my code:

my $var = "sde\\/dfg\\/htf"; `sed -i '/$var/d' ADT_DVEBMGS33_ldciadt`;

The above works fine.

i tried to encorporate in a loop

my $len = scalar @delete; for ( my $i = 0; $i <=$len; $i++){ my $first = $delete[$i]; chomp $first; $first =~ s:/:\\\\/:g; `sed -i "/$first/d" file2`; }

error

<c> sed: -e expression #1, char 10: extra characters after command sed: -e expression #1, char 0: no previous regular expression

Replies are listed 'Best First'.
Re: sed in perl
by Corion (Patriarch) on Nov 11, 2019 at 10:33 UTC

    Why are you using sed when you can use Perl directly?

    open my $fh1, '<', "file1" or die "Couldn't read 'file1': $!"; my %delete = map { s/\s*$//; $_ => 1 } <$fh1>; open my $fh2, '<', "file2" or die "Couldn't read 'file2': $!"; while( <$fh2>) { my( $key, $value ) = split /\s*=/; if( ! $delete{ $key }) { print $_; } else { # skip this key }; };

    If you want to keep on using sed, my advice is to print all the commands you're launching and then inspecting them or running them from the command line separately.

      I tried printing the sed command and to my surprise, sed is not working as expected. i get "/d' <file2>" as command and sed is nowhere part of the command. i will try out the perl code!
Re: sed in perl
by Anonymous Monk on Nov 11, 2019 at 10:40 UTC

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (6)
As of 2023-12-06 07:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    What's your preferred 'use VERSION' for new CPAN modules in 2023?











    Results (30 votes). Check out past polls.

    Notices?