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;' *.html
However, what if the text I want to find and replace is a filepath that has slashes? How do I do it then?
perl -pi -w -e 's/path/to/file/new/path/to/file/g;' *.html
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
With perl regexes, you can use any character except spaces as regex delimiter, although
\w
(sos xfooxbarx
is the same ass/foo/bar/
) and?
(implicitly activates match-only-once behaviour, deprecated) and'...'
(turns of variable interpolation)should be avoided. I prefer curly braces:
The delimiting character may not occur inside the respective strings, except when they are balanced braces or properly escaped. So you could also say
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
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
. Somatches the exact string
x*+
, even if characters like*
, '+' or|
etc. are included.