如果模式包含空格,如何解析表中的模式

如果模式包含空格,如何解析表中的模式

这个问题的延续:解析命令输出的第一列,获取对应的第二列值 假设我有一个命令输出格式化为表格的字符串,如下所示。如果我正在寻找的“模式”包含空格怎么办?例如,如果表是:

First Characteristic:     b
Second Characteristic:    89.4
Version:                  58.93
Name of Device:           myDevice
Name of Device Load:      myDevice-load-123abc

如果我想获取上表中“设备负载名称”旁边的值怎么办?

为了澄清,我知道我正在寻找的值位于“设备负载名称”旁边。我不知道它位于输出的第 5 行,并且我不知道该值会是什么样子(因此,例如,我无法尝试与“-load-”之类的内容进行模式匹配)。

答案1

那这个呢 :

grep "Name of Device Load:" your_file.txt| cut -d ":" -f 2 | tr -d " "

这只保留您感兴趣的行,将其分成两个字段(仅当:每行仅出现一次时才有效),然后删除空格。

答案2

我会用perl这个。

像这样的东西:

#!/usr/bin/env perl

use strict;
use warnings;

local $/;
my %lookup = ( <> =~ m/^(.*): (\S+)$/gm );
print $lookup{'Name of Device Load'},"\n";

我们从 或 文件名“读入”数据STDIN:(myscript.pl filename就是这样<>,有点神奇)。

我们使用上面的正则表达式捕获组来“解析”它,并且因为我们一次捕获两个元素(并且由于标志而在多行中重复捕获gm),所以我们创建了一个键值对的哈希表。

然后提取与命名键关联的值Name of Device Load并打印它,因此顺序无关。

答案3

我会使用 awk -F":" 来实现它。所以如果你想要第二列,你可以这样做

awk -F":" 'FNR == 5 {print $2}'

这是一个临时解决方案,但在这种情况下可行。

如果您知道并想要的模式是“设备负载名称”,您可以这样做

cat file.txt | grep "Name of Device Load" | awk -F":" '{print $2}'

编辑:添加了第五行和第二行的选项并搜索模式。基本都是按照这个思路来的

https://stackoverflow.com/questions/1506521/select-row-and-element-in-awk

答案4

通过下面的脚本我们可以获得第二个值

awk -F: /设备加载名称:/ { print $2} file1

相关内容