sed - 使用 sed 仅打印包含单词的行的部分内容
问题描述
我正在尝试创建一行,其中包含我的 NVMe 驱动器的温度值,仅使用 sed。
第一个芯片上使用智能日志的 nvme 输出
sudo nvme smart-log /dev/nvme0n1
Smart Log for NVME device:nvme0n1
namespace-id:ffffffff
critical_warning : 0
temperature : 40 C
available_spare : 100%
available_spare_threshold : 10%
percentage_used : 0%
data_units_read : 88.659
data_units_written : 351.868
host_read_commands : 659.265
host_write_commands : 787.770
controller_busy_time : 5
power_cycles : 17
power_on_hours : 6
unsafe_shutdowns : 1
media_errors : 0
num_err_log_entries : 2
Warning Temperature Time : 0
Critical Composite Temperature Time : 0
Temperature Sensor 1 : 40 C
Temperature Sensor 2 : 43 C
Thermal Management T1 Trans Count : 0
Thermal Management T2 Trans Count : 0
Thermal Management T1 Total Time : 0
Thermal Management T2 Total Time : 0
第一步是只选择以“C”结尾的行
sudo nvme smart-log /dev/nvme0n1 | sed -n '/C$/p'
temperature : 40 C
Temperature Sensor 1 : 40 C
Temperature Sensor 2 : 43 C
但我不想打印它们,而是想删除冒号之前的所有文本,并删除换行符并将输出获取到:
40 C 40 C 43 C
但我被整个模式/保持空间困住了。任何帮助,将不胜感激。
这只能用awk来实现,所以忽略算术请求
奖金目标
添加设备名称、度数符号,并仅显示 Sensor 的区别:
nvme0n1 40°C +0°C +3°C
解决方案
使用 GNU sed:
sed -n 's/.*: *//; /C *$/H; ${g;s/\n//g;p}'
输出:
40℃ 40℃ 43℃
sed -n 's/.*: *//; s/ $//; 1h; /C *$/H; ${g;s/\n/ /g;p}' file
输出:
nvme0n1 40 C 40 C 43 C
看:man sed
推荐阅读
- java - 创建一个运行预定义代码块的快捷方式/宏?
- java - 将 json 转换为 Java 对象 - 属性设置为 Null
- java - 在java中加载张量流模型
- jakarta-ee - 带有 CDI 和现有 JAX-RS 服务的 Vaadin 12 PWA
- meteor - Meteor 1.8.0.2 npm 错误:找不到模块'createjs'
- java - 获取字符串字节以执行 XOR 检查的 Java 错误
- c# - 我的页面出现 404 错误。但是当我刷新页面时它可以正常工作
- swift - CollectionView 单元中的标签值在 reloadItems() 时与旧值重叠一毫秒
- angularjs - Access-Control-Allow-Origin 中的多个 ip 不起作用
- python - 如何获得经过训练的 CNN 模型某一层的输出 [Tensorflow]