2010-12-21 4 views

Antwort

12

Sie verwenden / als regex Begrenzer helfen.
Es gibt / sogar in Ihrem Muster und Ersatz. Sie müssen irgendwie sicherstellen, dass diese / nicht als Trennzeichen behandelt werden sollten.

Sie haben zwei Möglichkeiten:

  1. die / in Ihrem Muster Flucht und Ersatz wie:

    perl -pi -e 's/class\/students\/a/class1\/students1\/B/g' * 
    
  2. Oder ein anderes Trennzeichen verwenden:

Methode 2 ist bevorzugt, da es Ihre Regex kurz und sauber hält.

+0

Dank funktionierte es .. – Arunachalam

+0

'perl -i -e' pflegt jede Datei aktualisieren an Ort und Stelle. Siehe perldoc perlrun –

+0

@eugene y: Danke für's Bemerken. – codaddict

8

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

Von perldoc perlop:

Alle Nicht-Leerzeichen Begrenzer kann die Schrägstriche ersetzen. Fügen Sie Leerzeichen nach s hinzu, wenn Sie ein Zeichen verwenden, das in Bezeichnern erlaubt. (...) Wenn das PATTERN durch Klammern Anführungszeichen abgegrenzt wird, hat der ERSATZ seine eigenen Anführungszeichen, die Anführungszeichen sein können oder nicht, zB s (foo) (bar) oder s/bar /.

0

Danke Perldoc perlop:

Mein Problem ist changin Oracle Startseite von Ihrem Befehl lösen. Ein weiterer Trick, den ich mit der Shell-Variable ersetzt habe.

export ORACLE_HOME=/oracle/product/11.2.0.3/db_1 

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

mehr scripted Weg ist:

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