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

Re: search/replace one liners without clobbering

by ExReg (Priest)
on Feb 25, 2016 at 23:20 UTC ( #1156151=note: print w/replies, xml ) Need Help??

in reply to search/replace one liners without clobbering

Are you looking to strip the c off the front and the f or l off the back?

perl -e '$tgt =~ s/\bc?(\w+?)(?:f|l)?\b/$1/g;'

Feed the target token into it to strip off leading c and trailing f or l. Of course, this would make a bool into a boo.

Replies are listed 'Best First'.
Re^2: search/replace one liners without clobbering
by f77coder (Beadle) on Feb 26, 2016 at 02:04 UTC

    yes bool would get mangled, also any print f gets mangled as well if rint is replaced.

    cases are

    prefix 'c' OR 'f' OR both or neither suffix, 'l' OR 'f' OR both or neither
      You asked for a oneliner, which by I think you mean to give each function separately, so for "exp", it would be:

      perl -pi -e 's/\bc?${tgt}[fl]?\b/$tgt/g' -s -- -tgt=exp *.c;

      The problem is fabs, which means you need to consider it separately:

      perl -pi -e 'for $tgt(qw(exp log pow sqrt sin cos tan asin acos atan sinh cosh tanh asinh acosh atanh)){ s/\bc?${tgt}[fl]?\b/$tgt/g };s/\b[cf]abs[fl]?\b/fabs/g' *.c;

      addendum, with the | or you wanted, it would be:

      perl -pi -e 's/\bc?(exp|log|pow|sqrt|sin|cos|tan|asin|acos|atan|sinh|c +osh|tanh|asinh|acosh|atanh)[fl]?\b/$1/g; s/\b[cf]abs[fl]?\b/fabs/g'

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (1)
As of 2021-10-21 01:59 GMT
Find Nodes?
    Voting Booth?
    My first memorable Perl project was:

    Results (82 votes). Check out past polls.