regex - 压缩 awk/sed 管道命令

标签 regex linux bash awk sed

我有一个丑陋的命令,它从传感器获取输出并去除不需要的字符和小数位,然后用带有尾随华氏符号的 awk 打印它。命令看起来像这样:

sensors -f | awk '/temp1/ { print $2 }' | sed 's/+//g' | awk '{ sub (/\..*/, ""); print $1 "°F" }'

此命令的输出如下所示。

101°F

命令有点乱,但它完成了工作,考虑到我对 awk 和 sed 的有限了解,这是值得一提的。我希望有更多知识的人可以告诉我如何压缩这个命令,因为我不清楚如何运行带有搜索模式的 awk,然后是替换,然后打印。任何帮助,将不胜感激。谢谢!

编辑:按要求输出 sensors -f。

acpitz-virtual-0
Adapter: Virtual device
temp1:       +112.2°F  (crit = +203.0°F)
temp2:       +118.6°F  (crit = +221.0°F)

coretemp-isa-0000
Adapter: ISA adapter
Core 0:      +119.0°F  (high = +212.0°F, crit = +212.0°F)
Core 1:      +121.0°F  (high = +212.0°F, crit = +212.0°F)

最佳答案

# Posix
sensors -f | sed -e '/^temp1:[[:blank:]]\{1,\}[+]/ !d' -e 's///;s/F.*/F/'
# GNU
sensors -f | sed '/^temp1:[[:blank:]]+[+]/!d;s///;s/F.*/F/'

另一种 sed 方法

关于regex - 压缩 awk/sed 管道命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32381161/

相关文章:

javascript - 从字符串中获取特定值/参数(keypare)

c++ - 选择监听套接字总是成功

linux - 如何在 unix 中将一个文件的第 10 行到第 15 行复制到另一个文件中?

bash - bash 文件模式和区分大小写的范围

regex - VB.Net正则表达式,获取可能包含单引号的单词,即单引号之间的单词

正则表达式查找逗号不在引号内

php - 使用正则表达式验证特定域 URL

linux - 关于shell变量和环境变量

linux - 使用 sed 和 wget 仅检索链接

bash - 如何将列表作为环境变量传递给 Terraform 使用?