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 :-)