2010-12-21 1 views
5

Perlを使用してファイル内の文字列を置き換える方法は? Perlを使ってファイル内でエスケープシーケンスを持つ文字列を置き換えるには?

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

この

は私

のためにうまく働いたが、私はclass1/students1/Bclass/students/aを変更しようとしたとき、それはすべての前にバックスラッシュ(\)(/)を追加しようとした..Iこの問題を解決するための方法を誤り、それをスローします役に立たなかった

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

答えて

12

正規表現の区切り文字として/を使用しています。
パターン交換にも/があります。これらの文字列が区切り文字として扱われないようにする必要があります。

perl -pi -e 's/class\/students\/a/class1\/students1\/B/g' * 
  • それとも別の区切り文字を使用します:

    1. としてあなたパターン交換/をエスケープ

      :2つのオプションが持つ

    正規表現を短くしてのままにする方法2が推奨されます。

    +0

    おかげで、それが働いた。.. – Arunachalam

    +0

    'perlの-i -e'は文句を言わないで、場所の任意のファイルを更新します。 perldoc perlrunを参照してください –

    +0

    @eugene y:気づいてくれてありがとう。 – codaddict

    8

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

    をお試しください:

    任意の非空白区切り文字は スラッシュを置き換えることができます。識別子に の文字を使用する場合は、 の後にスペースを追加します。 パターンが 括弧類で区切られている場合は(...)、交換には、独自の かではない も括弧類も引用符のペア、例えば、 S(FOO)(バー)またはS /バーを併設しています/。

    0

    ははperldoc perlopをありがとう:

    私の問題は、Oracleホームがあなたのコマンドで解決しましたCHANGINされます。シェル変数で置き換えるもう1つのトリックです。

    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 
    
    関連する問題