私が行う必要があるのは、sedコマンドを使ってperlからファイルの行を置き換えることです。問題は、ファイルに入れる必要がある行がいくつかの場所にあり、私はperl/sedを削除せずに\をkeppする方法を理解していません。sedを使用してテキストファイル内の行を置き換えますが、をperlスクリプトの置換行の一部として残してください。
例は次のとおりです。私は、ファイルに取得する必要があり
destination=Manager {manager hostname=Bill,Manager port=8443} Fred
::私は取得ファイルで
system sed "s/^destinaion=.*/destination=Manager {manager hostname\=$NAME,Manager port\=8443} $USER_NAME/" -i /usr/local/example_file.txt;
destination=Manager {manager hostname\=Bill,Manager port\=8443} Fred
これは、設定のプロパティファイルであり、それは正確である必要があります。
Perlで私のコマンド(単なる例):
$VAR1=$NAME
$VAR2=$USER_NAME
$VAR3='destination=Manager {manager hostname\\\\'
$VAR4='Manager port\\\\=8443} '
system sed 's/^destinaion=.*/$VAR3=$VAR1,$VAR4 $VAR2/' -i
/usr/local/example_file.txt;
出力した:
destination=Manager {manager hostname\=Bill,Manager port\=8443} Fred
私は私のために動作し、次の解決策を考え出したこのサイトを使用して
これは、問題の解答とredhatバージョンに応じて同じ行を4つの異なるプロパティファイルに渡しているので、うまくいきました。私がインストールしようとしているソフトウェアには、どのRedHatバージョンが使用されているかに応じて異なるプロパティファイルがあります。私は1つのインストールを行うことによってプロパティファイルを作成しなければならないし、スクリプト内のプロパティファイルを変更して、スクリプトを実行してエラーを監視できるようにforeachを使ってすべてのサーバーにインストールを行う。
私は現在2つのバージョンを使用していますので、正しいプロパティファイルを選択するためにスクリプトにif文を追加する必要がありました。
難しいです。いくつのプロセスが文字列を解釈し、バックスラッシュを取り除いているのか調べなければなりません。 1つのバックスラッシュを出力に入れるには、 'sed'は' s/.../.../'操作の置換部分に2つの連続するバックスラッシュを表示する必要があります。それを二重引用符で囲むので、Perlはバックスラッシュも解釈することができます。これは、出力にPerlでそれぞれ4つのバックスラッシュが必要であることを意味します。 –
通常、置換をPerl自体で行うのは、シェルターを使わずに行う方が速いです。 – choroba
より高速であるだけでなく、より重要なことに、エラーが発生しにくい。実際には、複雑で十分にテストされた 'sed'スクリプトが用意されていない限り、なぜ' 'sed''を' 'perl''から呼びたいのか、私は困惑しています。 – reinierpost