简体   繁体   English

正则表达式模式匹配Tcl

[英]Regexp Pattern Matching Tcl

I have data of the format file.txt 我有file.txt格式的数据

afsdfds/sfsd/sfdsf/VISA_CTS_ec0cbf000an2n06x5_G3B7I1/sfdfdvged/sdvdsfgv ec0cbf000an2n06x5 
afsggggdfds/sfsd/sfdsf/VISA_CTS_ec0clb000an2n10x5_G3B7I1/sfdggggfdvged/sdvdsfgv ec0clb000an2n10x5 
afsdfds/fdddo9045374857_234242/sfsd/sfdsf/VISA_CTS_ec0cilb000an2n16x5_G3B7I1/sfdfdvged/sdvdsfgv ec0cilb000an2n16x5 
qweryt/visa_ec0ceb000an2n20x5_tyiuop/gfds_sfgds_/clock_VISA_CTS_ec0ceb000an2n20x5_G3B7I1/hjkhfjhfd/asdfasdf ec0ceb000an2n20x5 

I am using in Tcl 我在Tcl中使用

package require fileutil 

set filename file.txt 
set pattern {ec0cbf|ec0clb|cb|ceb} 
puts "[llength [fileutil::grep $pattern $filename]] occurances" 

$tcl> 7 occurances 

I want only the right most values from file.txt to be returned by my regexp and my final answer to be 3 occurances (ec0cbf000an2n06x5 ec0ceb000an2n20x5 ec0ceb000an2n20x5) ) instead of 7 as I am not detecting "cilb" 我只希望regexp返回file.txt中最正确的值,而我的最终答案是3次出现(ec0cbf000an2n06x5 ec0ceb000an2n20x5 ec0ceb000an2n20x5)),而不是7,因为我没有检测到“ cilb”

This file.txt is dynamic data` 这个file.txt是动态数据`

This can solve your problem: 这可以解决您的问题:

set a [open test.txt r]
set data [read $a]
set c [split $data "\n"]
set cnt 0

% foreach d $c {
    if {[regexp {ec0cbf|ec0clb|cb|ceb} $d]} {
        puts "[lindex $d  end]"
        incr cnt
    }
}
puts $cnt

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM