Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

sed in perl

by GauCho (Initiate)
on Nov 11, 2019 at 10:22 UTC ( [id://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 romping around the Monastery: (3)
As of 2024-04-18 01:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found