我正在尝试从下面的输出中提取文本和第三列。我的问题是有一行缺少空间。在这种情况下是否可以提取该值?
4086 process-working 841901 841901 1234 22
4297 procesor_stats_controller_fmm543182 543182 0 22
4028 ipv6_ma 3063025 3063025 -55 78
4280 tty-verifyd 694043 694043 0 22
到目前为止,我的正则表达式如下:
\d+\s+(\w+-?\w+)\s*\d+\s+\d+\s+(-?\d+)\s+\d+
谢谢
编辑:它实际上是设备中的一个错误,至少应该有一个空格,所以我只是让他们修复它然后重试。感谢您抽出宝贵时间回答这个问题:)答案 0 :(得分:2)
在这种情况下,我首先将该行拆分为字段
foreach line $lines {
set fields [regexp -inline -all {\S+} $line]
if {[llength $fields] == 6} {
puts [lindex $fields 2]
} else {
# extract the digits at the end of this field
regexp {\d+$} [lindex $fields 1] value
puts $value
}
}
841901
543182
3063025
694043
答案 1 :(得分:0)
问题在于\w
。 \w
相当于[a-zA-Z0-9_]
。
因此,它也会与数字相匹配(因为空间不足)。
而不是\w
,请使用[a-zA-Z_]
。因此,这个正则表达式应该适合你:
\d+\s+([a-z]+-?[a-z]+)\s*(\d+)\s+\d+\s+\d+\s+\d+