1

abc.txt フォームのデータを含むファイルがあります

sHost = "Arun";
sUid ="Abc";

ArunPerlを使ってforsHostなどを取得したい。私のコード:

my $filename = "abc.txt";

use strict;
use warnings;

open(my $fh, '<:encoding(UTF-8)', $filename)
  or die "Could not open file '$filename' $!";

while (my $row = <$fh>)
{
  chomp $row;
  if ($row=~m/sHost/)
  {
    print $row;
  }
}

私が得ている出力sHost = Arun;

しかし、私は欲しいだけ'Arun'です。ここでどのようなロジックを適用する必要がありますか? 私はPerlとLinuxに非常に慣れていません。

4

4 に答える 4

2

チョップの後、これに変更すると、変数 $host に値が含まれます

if ($row=~m/sHost = "(.*)"/) {
  $host=$1;

簡単に言えば、( ) セクションは、一致する場合に $1 に与えられます。詳細については man perlre を参照してください

これを一般化して任意のキーと任意の値を読み取るには、次のようにします

 while (my $row = <$fh>) {
   if ($row = ~ /^(\w+) = "([^"]+)"/) {
     $value{$1} = $2;
   }

$value{'sHost'} は "Arun" などになります

于 2013-03-11T09:51:53.503 に答える
1

ユニバーサル構成ファイルの解析には、次のコードを使用できます。

my %config;
if ($row =~ m/^\s*(["'`])?(\S+)\1?\s*=\s*(["'`])?(\S+?)\3?;?$/) {
    my $key       = $2;
    my $value     = $4;
    $config{$key} = $value;
}

この正規表現を使用すると、プレーンまたは別の引用符タイプ ( " ' ` 、ただし必要に応じて記号を追加できます) で囲まれたキーと値の行を処理できます。先頭または末尾の空白を含むキー/値、セミコロンは必須ではありません。キー/値の可能な値の要件に応じて(\S+)を変更できます (\S - 空白を除くすべて)。

于 2013-03-12T10:45:11.843 に答える
0

m/.*=\s*([^\s]*)/gの代わりに使用m/sHost/

print $1の代わりに使用print $row

于 2013-03-11T09:48:38.040 に答える
-1

交換

if ($row=~m/sHost/)

if ($row=~s/sHost//)
于 2013-03-11T09:47:25.757 に答える