2016-05-03 8 views
-2

私は今、私は変数の値を更新したいファイルがあります。これを行う方法は? ファイル内容:この中に今Perlのファイルテキストを編集するには

<Config> 
NUM1 = 8 
AMV1 = 8 
AMV2 = 8 
DEF2 = 8 
DGF = 8 
</Config> 

私たちはPerlでこれを行うことができますどのようにNUM1の値を変更したいです。

+4

あなたが知っている、それはStackOverflowのが動作するようになっているか、実際にはありません。あなたの仕様にコードを書くだけではありません。一般的に、私たちはあなた自身で問題を解決するために何らかの努力をしてほしいと思っており、あなたが持っている特定の問題についてお手伝いします。 –

+0

幸いにも、このコードはすでに書かれています。 'Config :: General'はこのファイル形式をうまく読み込み、' save_file'メソッドが書き込みを行います。 – tjd

+0

[何を試してみましたか?](http://whathaveyoutried.com) あなたの質問は、あなたが書いたコードを表示するために編集してください。 どこにいらっしゃいましたら、 の問題を解決することができます。 [ask]も読んでください。 –

答えて

3

あなたはワンライナーを使用して、コマンドラインから直接それを行うことができます。

perl -i~ -pe 's/^(\s*NUM1)=.*/$1=NewValue/' config-file 
  • -i~がチルダでバックアップを残して、「場所に」ファイルを変更するには、-p読み取り
  • を追加しました行単位で入力し、それを印刷します。
  • s///は代用です。
  • ()正規表現にキャプチャグループを作成すると、 update-configに保存

    #!/usr/bin/perl 
    use warnings; 
    use strict; 
    
    while (<>) { 
        s/^(\s*NUM1)=.*/$1=NewValue/; 
        print; 
    } 
    

    update-config config-file > new-configとして実行:最初のキャプチャグループは、スクリプトで$1

として交換部品から参照することができ、あなたは実際のコードで-pを置き換える追加する必要があります。

または、ファイルを自分のも、開口部を処理する場合:

#!/usr/bin/perl 
use warnings; 
use strict; 

my $filename = 'config-file'; 
my $newfile = "$filename.new"; 
my $backup = "$filename~"; 

open my $IN, '<', $filename or die $!; 
open my $OUT, '>', $newfile or die $!; 
while (<$IN>) { 
    s/^(\s*NUM1)=.*/$1=NewValue/; 
    print {$OUT} $_; 
} 
close $OUT or die $!; 
rename $filename, $backup or die $!; 
rename $newfile, $filename or die $!; 
+0

これをperlスクリプトに入れたいのですが、perlスクリプトの中でどうすればいいのですか? – Developer

+0

@Developer:アップデートを確認してください。 – choroba

+0

ファイルの値を更新していません – Developer

関連する問題