找到一个字符串并提取字母到找到的字符串,直到另一个指定的字符串

时间:2015-02-27 17:13:10

标签: regex string awk

在找到的字符串前找到一个字符串并提取字母,直到另一个指定的字符串

参考下面的一行,我想找到字符串'Task'并预先打印字母,直到下一个立即(,)逗号。在这种情况下'192'

60132>, Exclusive Execution, 192 Task(s), Requested Resour

我尝试了下面给出的方法,但它不适合我,因为有时'任务'字符串会随机改变它在行中的位置。

| awk -F ',' '{ print $2}' | grep -o '[0-9]\+' 

2 个答案:

答案 0 :(得分:1)

您可以使用re.search

>>> s="60132>, Exclusive Execution, 192 Task(s), Requested Resour"
>>> re.search(r'(\d+) (\S+)\(.*\)',s).group(0)
'192 Task(s)'
>>> re.search(r'(\d+) (\S+)\(.*\)',s).group(1)
'192'
>>> re.search(r'(\d+) (\S+)\(.*\)',s).group(2)
'Task'

Regular expression visualization

Debuggex Demo

答案 1 :(得分:0)

由于这是一行上的简单替换,因此创建了一个作业sed:

$ sed -r 's/.*,[[:space:]]*([^,[:space:]]+)[[:space:]]*Task.*/\1/' file
192

您可以使用gensub()或任何带有match()+ substr()和/或[g] sub()的awk在GNU awk中执行相同的操作。