linux - 从某一行搜索文件中的字符串 no
问题描述
如何使用 bash 脚本从文本文件中的特定行/之后搜索字符串?
例如,我想搜索第一次出现的"version:"
字符串,但不是在文件开头,而是在第 1 行。说 35 其中包含文本*-disk:0
,这样我就只能得到磁盘 0 的产品名称,而没有别的。我目前的方法如下line_no
行号在哪里。所在的行disk:0
。disk:0
但有时在和之间也会出现供应商名称version
。到时候,这个逻辑就失效了。
ver_line_no=$(echo $(( line_no + 6 )))
ver_line_text=`sed -n ${ver_line_no}p $1`
check_if_present=`echo $fver_line_text | grep "version:"`
背景:
我正在尝试解析命令的输出lshw
。
*-disk:0
description: ATA Disk
product: SAMSUNG
physical id: 0
bus info: scsi@z:y:z:0
logical name: /dev/sda
version: abc
serial: pqr
size: 2048GiB
capabilities: axy, pqr
configuration: pqr, abc, ghj
*-disk:1
description: ATA Disk
product: TOSHIBA
physical id: 0
bus info: scsi@p:q:z:0
logical name: /dev/sdb
version: nmh
serial: pqasd
size: 2048GiB
capabilities: axy, pqr
configuration: pqr, abc, ghj
这是样本信息。我想使用 bash 脚本以表格格式打印信息。
解决方案
sed
解决方案:
如果您想在给定的行号(例如)之后搜索第一次出现10
。
l=10
lshw | sed -n "${l},$ {/version/{p;q}}"
如果您想在给定的行内容之后搜索第一次出现(例如*-disk:0
)
lshw | sed -n '/*-disk:0/,${/version/{p;q}}'
推荐阅读
- objective-c - 可以在头文件中定义 Objective-C 实现并由多个源文件导入吗?
- c++ - 将 c++ 数组分配给指针
- html - 使用量角器在 GUI 中验证文本是否重叠的不同方法
- java - 如何消除“List 类型的表达式需要未经检查的转换以符合”警告?
- c++ - 重载流操作符(`>>` 和 `<<`)
- firebase - 刷新以加载新数据并滚动以分页数据 Flutter Firestore
- numpy - 如何在 3D 数组的前两个维度上应用 numpy 矩阵运算
- sql - 如何从另一个表中添加一个表中的列,该表在 SQL Server 的两个表中具有公共 id 列?
- linux - 根据 csv 文件中的某些条件更新特定字段
- angular - innerHtml 中的 Angular 注入组件