我试图从文件的特定部分提取信息(在某一点下)。更准确地说,我希望能够找到一个关键字,例如" M2",然后找到" Freq"在M2下获得该数字而不与M1或M3混合。
最简单的答案很可能是grep,sed,awk或cut的组合。
M1 {
频率:1GHz
温度:125C
}
M2 {
频率:1.1GHz
温度:130C
}
M3 {
频率:0.78GHz
温度:89C
}
答案 0 :(得分:2)
尝试
awk '/M2/ {found=1} found && $1=="Freq:" {print $2; exit}' file
答案 1 :(得分:2)
你可以使用awk,
$ awk -v RS="\s*M" 'NR==3{print $3}' file
1.1GHz
答案 2 :(得分:2)
使用perl one-liner
perl -ne 'print $1 if /M2\{/ .. /\}/ and /Freq:\s*(.*)/' file
切换:
-n
:为输入文件中的每个“行”创建一个while(<>){..}
循环。 -e
:告诉perl
在命令行上执行代码。 <强>代码强>:
/M2\{/ .. /\}/
:用于测试两行之间的范围运算符/Freq:\s*(.*)/
:找到匹配的行,并在$1
中捕获值。答案 3 :(得分:1)
perl -lane 'print $F[1] if /M2[{]/ .. /[}]/ and /Freq/' file
答案 4 :(得分:0)
使用perl
perl -nle 'chomp; $str.="$_"; END{ $str =~ /M2\{.*?(Freq: .*?\s)/ && print $1 }' file
Freq: 1.1GHz
说明:
chomp
删除\n
$str.="$_"
创建一个包含整个输入的字符串$str =~ /M2\{.*?(Freq: .*?\s)
提取我们追踪的字段