in reply to Selective replace based on user input

Hello LexPl and my late welcome to the monastery,

..the following is not wise nor beuatiful, but it works (added some space for readability and please note windows double quotes!)

cat lorem.txt Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor incidunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor incidunt ut labore et dolore magna aliqua. perl -M"5;$S=shift;$R=shift;open $o,'>','new2.txt'" -ne "chomp;if($_=~ +/$S/){print qq/$_ $R?/;($_=$_)=~s/$S/$R/ if<STDIN>=~/y/}print$o $_.$/ +" ipsum REPLACE lorem.txt Lorem ipsum dolor sit amet, consectetur adipisci elit, REPLACE? y Lorem ipsum dolor sit amet, consectetur adipisci elit, REPLACE? n cat new2.txt Lorem REPLACE dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor incidunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor incidunt ut labore et dolore magna aliqua.

L*

PS after some failure I gave up passing regexes as arguments and toying with perl -s ... -S=ipsum and whatalike

PPS add -MO=Deparse to see it better:

perl -MO=Deparse -M"5;$S=shift;$R=shift;open $o,'>','new2.txt'" -ne "c +homp;if($_=~/$S/){print qq/$_ $R?/;($_=$_)=~s/$S/$R/ if<STDIN>=~/y/}p +rint$o $_.$/" sub BEGIN { require 5; () } $S = shift @ARGV; $R = shift @ARGV; open $o, '>', 'new2.txt'; LINE: while (defined($_ = readline ARGV)) { chomp $_; if ($_ =~ /$S/) { print "$_ $R?"; ($_ = $_) =~ s/$S/$R/ if readline(STDIN) =~ /y/; } print $o $_ . $/; } -e syntax OK

PPPS given perlrun doc inaccurate on -s switch

perl -M"5;open $o,'>','new2.txt'" -sne "chomp;if($_=~/$S/){print qq/$_ $R?/;($_=$_)=~s/$S/$R/ if<STDIN>=~/y/}print$o $_.$/"  -- -S=ipsum -R=REPLACE lorem.txt

..works!

There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.

Replies are listed 'Best First'.
Re^2: Selective replace based on user input -- oneliner
by ikegami (Patriarch) on Nov 22, 2024 at 21:46 UTC

    You added some significant restrictions without mentioning them.

    • Matches cannot span lines.
    • Only one replacement will be attempted per line.
Re^2: Selective replace based on user input -- oneliner
by ikegami (Patriarch) on Nov 23, 2024 at 18:32 UTC

    perlrun is silent about the need for "--" before arguments that start with "-", but it's not inaccurate about it.