83

以下が内容です。

Subject:
    Security ID:        S-1-5-21-3368353891-1012177287-890106238-22451
    Account Name:       ChamaraKer
    Account Domain:     JIC
    Logon ID:       0x1fffb

Object:
    Object Server:  Security
    Object Type:    File
    Object Name:    D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log
    Handle ID:  0x11dc

その行の単語の後のObject Name:単語をキャプチャする必要があります。ですD:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log

これどうやってするの?

^.*\bObject Name\b.*$一致 - オブジェクト名

4

6 に答える 6

61

しかし、私は試合結果が必要です... 試合グループではありません...

あなたがやろうとしていることは、これでうまくいくはずです。\K試合の開始点をリセットします。

\bObject Name:\s+\K\S+

一致を取得する場合も同じことができますSecurity ID

\bSecurity ID:\s+\K\S+
于 2013-10-05T02:51:45.833 に答える
59

以下はあなたのために働くはずです:

[\n\r].*Object Name:\s*([^\n\r]*)

実施例

希望の試合はキャプチャ グループ 1 になります。


[\n\r][ \t]*Object Name:[ \t]*([^\n\r]*)

同様ですが、「何とかオブジェクト名:何とか」などは許可されません。また、「オブジェクト名:」の後に実際のコンテンツがない場合は、次の行をキャプチャしないようにしてください。

于 2013-10-05T02:18:26.997 に答える
16

あなたはほとんどそこにいます。次の正規表現を使用します (複数行オプションを有効にして)

\bObject Name:\s+(.*)$

完全一致は

Object Name:   D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log

キャプチャされたグループが含まれている間

D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log

ファイル パスを直接取得する場合は、

(?m)(?<=\bObject Name:).*$
于 2013-10-05T02:21:32.120 に答える
-3

必要なものを取得するための簡単な Perl スクリプトを次に示します。空白をむさぼり食う必要があります。

#!/bin/perl

$sample = <<END;
Subject:
  Security ID:        S-1-5-21-3368353891-1012177287-890106238-22451
  Account Name:       ChamaraKer
  Account Domain:     JIC
  Logon ID:       0x1fffb

Object:
  Object Server:  Security
  Object Type:    File
  Object Name:    D:\\ApacheTomcat\\apache-tomcat-6.0.36\\logs\\localhost.2013- 07-01.log
  Handle ID:  0x11dc
END

my @sample_lines = split /\n/, $sample;
my $path;

foreach my $line (@sample_lines) {
  ($path) = $line =~ m/Object Name:([^s]+)/g;
  if($path) {
    print $path . "\n";
  }
}
于 2013-10-05T02:35:52.157 に答える