So I looked around on Stackoverflow and I understand finding and replacing text works something like this:
perl -pi -w -e \'s/www.example.com/www.pressbin.com/g;
You can use other characters than '/' to specify patterns. For example:
perl -pi -w -e 's,path/to/file,new/path/to/file,g;' *.html
perl -pi -w -e 's/path\/to\/file/new\/path\/to\/file/g;' *.html
With perl regexes, you can use any character except spaces as regex delimiter, although
\w
(so s xfooxbarx
is the same as s/foo/bar/
) and?
(implicitly activates match-only-once behaviour, deprecated) and'...'
(turns of variable interpolation)should be avoided. I prefer curly braces:
perl -pi -w -e 's{path/to/file}{new/path/to/file}g;' *.html
The delimiting character may not occur inside the respective strings, except when they are balanced braces or properly escaped. So you could also say
perl -pi -w -e 's/path\/to\/file/new\/path\/to\/file/g;' *.html
but that is dowrnright ugly.
When using braces/parens etc there can be whitespace between the regex and the replacement, allowing for beatiful code like
$string =~ s {foo}
{bar}g;
Another interesting regex option in this context is the quotemeta
function. If your search expression contains many characters that would usually be interpreted with a special meaning, we can enclose that string inside \Q...\E
. So
m{\Qx*+\E}
matches the exact string x*+
, even if characters like *
, '+' or |
etc. are included.