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