HP-UX サーバー上で絶え間なく更新されている大量のログ ファイルがあります。Perl コードを作成して、使用している文字列が含まれるログ ファイルの名前を見つけました。Perl は分割を使用してファイル名を取得し、それを変数に渡します。ユーザー入力を使用して、開始文字列と停止文字列を 2 つの変数として作成します。
my $ssh = Net::OpenSSH->new($host, user => $user,
master_opts => [ -o => 'NumberOfPasswordPrompts=1',
-o => 'PreferredAuthentications=keyboard-interactive,password'],
login_handler => \&login_handler);
$ssh-> error and die "Unable to connect" . $ssh->error;
my $output=$ssh->capture("grep .$userinput1. /app/bea/user_projects/domains/granite/om_ni.log*");
my $array = (split ":", $output)[0];
print "$array"."\n";
[編集]: ご要望どおり、上記は $array がどのように埋められるかの始まりです。以下は awk シーケンスが始まる場所です:
my $a= "INFO - $userinput1";print $a;
my $b= "INFO - ProcessNode terminated... [$userinput1]";print $b;
awk を ssh キャプチャ コマンドの一部として使用すると、ログ ファイル全体を検索し、文字列 $a と文字列 $b の間のすべての行をキャプチャしてから、別の配列内のすべてを取得します。
my $output2=$ssh->capture("awk -v i=$array '$a,$b' i");
ここで $array は、ログ ファイルのフル パスが保持される場所であり、パス変数として完全に正常に機能します。-v パラメータなしで awk を使用してみましたが、まったく問題ありませんでした。
[編集 2]:これは print "$array"."\n"; の結果です。
/app/bea/user_projects/domains/granite/om_ni.log.2
perl スクリプトを実行すると、次の結果が得られます。
INFO - 28B26AD1-E959-4F5F-BD89-A7A6E601BE18INFO - ProcessNode terminated... [28B26AD1-E959-4F5F-BD89-A7A6E601BE18] syntax error The source line is 1.
The error context is
INFO - 28B26AD1-E959-4F5F-BD89-A7A6E601BE18,INFO - ProcessNode >>> terminated. <<< .. [28B26AD1-E959-4F5F-BD89-A7A6E601BE18]
awk: Quitting
The source line is 1.
どういうわけか「終了」単語を指すエラーですが、文字列全体にエスケープ文字を使用しても、気にせず、同じエラーを返します。
この問題に関するヘルプは大歓迎です。よろしくお願いします。