How to replace a line that has an escape sequence inside a file using Perl?

How to replace a line inside a file using perl?

perl -pi -e 's/Arun/Brun/g' *

it worked fine for me

but when I tried to change class/students/ato class1/students1/B, it gives an error, how to solve this problem. I tried adding a slash ( \) before each ( /), but that didn't help

perl -pi -e 's/class/students/a/class1/students1/B/g' *
+5
source share
3 answers

You use /as a regex separator.
There is /even in your template and replacement. You need to make sure somehow that these /should not be considered as a delimiter.

You have two options:

  • / :

    perl -pi -e 's/class\/students\/a/class1\/students1\/B/g' *
    
  • :

    perl -pi -e 's#class/students/a#class1/students1/B#g' *
    

2 , .

+12

perl -pi -e 's{class/students/a}{class1/students1/B}g' *

perldoc perlop:

. s . (...) PATTERN , , , , s (foo) (bar) s/bar/.

+8

perldoc perlop:

, Oracle Home . , .

export ORACLE_HOME=/oracle/product/11.2.0.3/db_1

perl -pi -e 's{REPLACEWITHORACLEHOME}{'$ORACLE_HOME'}g' filename

:

for y in `ls`;do perl -pi -e 's{REPLACEWITHORACLEHOME}{'$ORACLE_HOME'}g' $y;done
0

All Articles