Find and replace text with slash characters

前端 未结 3 1322
清酒与你
清酒与你 2021-01-22 01:01

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;         


        
相关标签:
3条回答
  • 2021-01-22 01:40

    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
    
    0 讨论(0)
  • 2021-01-22 01:48

    perl -pi -w -e 's/path\/to\/file/new\/path\/to\/file/g;' *.html

    0 讨论(0)
  • 2021-01-22 02:05

    With perl regexes, you can use any character except spaces as regex delimiter, although

    • Characters in \w (so s xfooxbarx is the same as s/foo/bar/) and
    • Question marks ? (implicitly activates match-only-once behaviour, deprecated) and
    • single quotes '...' (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.

    0 讨论(0)
提交回复
热议问题