簡體   English   中英

如何使用Tcl regexp完全匹配“Client Hello ServerName”?

[英]How to match “Client Hello ServerName” exactly using Tcl regexp?

我的TCL腳本:

set line { 
Jul 24 21:06:40 2014: %AUTH-6-INFO: login[1765]: user 'admin' on 'pts/1' logged
Jul 24 21:05:15 2014: %DATAPLANE-5-: Unrecognized HTTP URL www.58.net. Flow: 0x2
Jul 24 21:04:39 2014: %DATAPLANE-5-: Unrecognized HTTP URL static.58.com. Flow:
Jul 24 21:04:38 2014: %DATAPLANE-5-: Unrecognized HTTP URL www.google-analytics.com. Flow: 0x2265394048.
Jul 24 21:04:36 2014: %DATAPLANE-5-: Unrecognized HTTP URL track.58.co.in. Flow: 0
Jul 24 21:04:38 2014: %DATAPLANE-5-:Unrecognized HTTP URL www.google.co.in. Flow: 0x87078800
Jul 24 21:04:38 2014: %DATAPLANE-5-:CCB:44:Unrecognized Client Hello ServerName www.google.co.in. Flow: 0x87073880. len_analyzed: 183
Jul 24 21:04:38 2014: %DATAPLANE-5-:CCB:44:Unrecognized Server Hello ServerName test1. Flow: 0x87073880, len_analyzed 99
Jul 24 21:04:38 2014: %DATAPLANE-5-:CCB:44:Unrecognized Server Cert CommonName *.google.com. Flow: 0x87073880
Jul 24 21:04:38 2014: %DATAPLANE-5-:CCB:44:Searching rname(TYPE_A) cs50.wac.edgecastcdn.net in dns_hash_table
Jul 24 21:04:38 2014: %DATAPLANE-5-:Unrecognized HTTP URL www.facebook.com. Flow: 0x87078800
Jul 24 21:04:38 2014: %DATAPLANE-5-:CCB:44:Unrecognized Client Hello ServerName www.fb.com. Flow: 0x87073880. len_analyzed: 183
Jul 24 21:05:38 2014: %DATAPLANE-5-:CCB:44:Unrecognized Server Hello ServerName test. Flow: 0x87073880, len_analyzed 99
Jul 24 21:04:38 2014: %DATAPLANE-5-:CCB:44:Unrecognized Server Cert CommonName *.facebook.com. Flow: 0x87073880
Jul 24 21:05:39 2014: %DATAPLANE-5-:CCB:44:Searching rname(TYPE_A) cs50.wac.facebook.net in dns_hash_table
}


set urls [list]
        foreach item [regexp -all -inline {Client[ ]Hello[ ]ServerName\s+\S+} $line] {
        lappend urls [lindex $item 1]
        }
        #puts $res
            set s "*****************************************************"
            set f {}
            set f [open output.txt a]
            if {$f ne {}} {

            foreach url $urls {
            chan puts $f $url

            }
            chan puts $f $s
            chan close $f
            }

我正在嘗試打印$line “Client Hello ServerName”之后出現的字符。 我需要匹配完全“Client Hello ServerName”並在regexp中使用它來獲取輸出。 我試過Client[ ]Hello[ ]ServerName 但它不起作用。

輸出應該是“www.google.co.in.www.fb.com”。 在output.txt文件中。

您可以使用大括號()Client Hello ServerName之后捕獲字符串,例如:

foreach {dummy item} [regexp -all -inline {Client Hello ServerName\s+(\S+)} $line] {
  lappend urls $item
}

嘗試在這里測試你的知識和模式: https//www.debuggex.com/它非常適合學習和檢查你是否得到你想要的。

然而:

set pattern {^.*Client Hello ServerName\s+(.*)\s+Flow.*$}
foreach element $line {
  set result [regexp $pattern $element match url]
  if {$url} {
    lappend urls $url
  }
}

()將匹配您想要的模式。 使用' 。* '可以很容易地看到匹配是什么,添加一個模式可以讓它更容易思考。

如果regexp匹配則$ result = 1,否則$ return = 0; 如果匹配發生,則將url匹配添加到url。

您可以在http://wiki.tcl.tk/986上找到有關tcl regexp的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM