regex - 从标准输出获取匹配后的文本

标签 regex linux bash shell grep

我想提取使用 grep 或诸如此类的特定单词后的下一个单词/数字。

举个例子,假设这是我在标准输出中的内容

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

编辑

一个具体的例子...

标准输出是这个

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

我正在搜索单词open , closetotal所以输出应该是

0.23
1.52
2.34
5.92
10.78
24.21
45.3

最佳答案

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

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

对于一般情况,如果您对“字符串”的定义基于空格,也许您想要:

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

关于regex - 从标准输出获取匹配后的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38353310/

相关文章:

regex - 在 bash 中使用正则表达式验证输入

java - 正则表达式/Java 匹配缺少第二个引号的字段

linux - 如何在 Linux 设备上安装 Windows Phone 8.1 应用程序?

linux - shell 脚本 'installer'

bash - 如何修复 "ERROR:buffer_manager.cc(488)] [.DisplayCompositor]GL ERROR :GL_INVALID_OPERATION : glBufferData:"

javascript - JavaScript 正则表达式中的反向引用

JavaScript、动态正则表达式、替换分隔符之间(包括分隔符)的所有内容

linux - 根据第 n 次出现的定界符拆分大文件

linux - Linux Shell 脚本的奇怪行为

linux - 如何使用 sed 在一行中多次出现的两个模式之间搜索文本?