我对grep和sed命令相当新。如果在bash脚本中使用grep或sed从+50.0
中提取Core 0: +50.0°C (high = +80.0°C, crit = +90.0°C)
怎么办?
acpitz-virtual-0
Adapter: Virtual device
temp1: +50.0°C (crit = +89.0°C)
temp2: +50.0°C (crit = +89.0°C)
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +50.0°C (high = +80.0°C, crit = +90.0°C)
Core 2: +47.0°C (high = +80.0°C, crit = +90.0°C)
Bash脚本:
#!/bin/bash
temp=`sed -n '/^Core 0: $/,/^(high/p' ~/Desktop/sensors.txt`
echo $temp
答案 0 :(得分:2)
使用grep -oP
(PCRE正则表达式):
grep -oP 'Core 0: +\K[+-]\d+\.\d+' ~/Desktop/sensors.txt
+50.0
答案 1 :(得分:2)
grep -e '^Core 0:' [input] | awk '{ print $3 }'
或者,只是在awk中,
awk '{ r = "^Core 0:" } { if(match($0,r)) { print $3 } }' [input]
这两个都会打印出您正在寻找的字段,并消除周围的空白。
答案 2 :(得分:2)
使用grep传入perl-regex标志并使用\K丢弃左侧不需要的部分
grep -oP '^Core 0:\s+\K\+\d+[.]\d+?'
答案 3 :(得分:1)
为了完整起见,这是尝试修复sed
脚本。
sed
是面向行的,因此您的尝试将从与第一个表达式匹配的任何内容(无论如何都不会匹配)打印到与第二个匹配的后续行。
(因此,换句话说,sed -n '/first/,/last/p' file
将从匹配file
的{{1}}的第一行打印,并在其后续输入行中找到first
时停止文件)。
请改为尝试:
last
这将替换第一个表达式。如果没有发生替换,sed -n 's/^Core 0: *//;T;s/ (high.*//p' ~/Desktop/sensors.txt
跳转到脚本的末尾(隐式地什么也不做,只是从下一个输入行重新开始)。否则,我们有一个匹配,所以我们也没有替换尾部,并打印。
...但是,并非所有T
方言都有sed
命令,有些显然不喜欢以分号分隔的脚本。