从stdout获得匹配后的文本

时间:2016-07-13 13:35:51

标签: regex linux bash shell grep

我想在使用grep或whatnot找到的特定单词后提取下一个单词/数字。

举一个例子,我可以说这是stdout中的内容

string-a0 match-a1 string-a2 string-a3
string-b0 string-b1 match-b2 string-b3
match-c0 string-c1 string-c2 string-c3

我想留下这个

string-a2
string-b3
string-c1

请注意match-a1 != match-b2 != match-c0

修改

一个具体的例子......

stdout就是这个

open 0.23 date ...
close 1.52 date ...
open 2.34 date ...
close 5.92 date ...
open 10.78 date ...
close 24.21 date ...
total 45.3

我正在搜索openclosetotal这样的字词,因此输出应为

0.23
1.52
2.34
5.92
10.78
24.21
45.3

2 个答案:

答案 0 :(得分:1)

这与一般情况不符,但适用于您的示例:

awk '/^open|^close|^total/{print $2}' input

对于一般情况,如果您定义"字符串"是基于空白,也许你想要:

tr -s ' \n' \\n < input | awk 'p{print; p=0} {p=/^open|^close|^total/}'

答案 1 :(得分:1)

您可以使用此awk在搜索词后打印下一个单词:

awk -v s='^(open|close|total)$' '{for (i=1; i<NF; i++) if ($i ~ s) print $(i+1)}' 

0.23
1.52
2.34
5.92
10.78
24.21
45.3