perl one liner to replace part of file with other file -


i'm having problems 1 liner:

perl -pe 's/findme/`cat rep.txt`/ge' in.txt 

if use this, works, want add text before , after replaced content:

perl -pe 's/findme/something1`cat rep.txt`something2/ge' in.txt 

i error:

syntax error @ -e line 1, near "something1`cat rep.txt`" 

shouldn't output of command treated string?

adicionally, i'm confused fact can't replace character <

perl -pe 's/something/<somethingelse/ge' in.txt unterminated <> operator @ -e line 1. 

escaping < (\<) gives me same error.

the problem using e modifier regexp, means eval{} (or in other words, execute) replacement string code snippet, treating shell replacement. e modifier expects code, not text.

so, normal (global) replace use:

s/findme/replace/g 

... , fine. however, when use e flag, replacement run code. thus:

s/findme/`cat foo.txt`/ge; 

... equivalent ...

$replace = `cat foo.txt`; s/findme/$replace/g; 

so, can see how this:

s/findme/something`cat foo.txt`/ge; 

... equivalent to...

$replace = something`cat foo.txt`; s/findme/$replace/g; 

... , syntax error. try way instead:

s/findme/"something".`cat foo.txt`/ge; 

and find works, because valid code:

$replace = "something".`cat foo.txt`; 

( can of course put more complex things in there; since going on behind scenes eval{}, code doing this:

eval { "something".`cat foo.txt`; } s/findme/$_/g; 

however i'm simplifying ease of comprehension :-)