首页 > 解决方案 > 从某一行搜索文件中的字符串 no

问题描述

如何使用 bash 脚本从文本文件中的特定行/之后搜索字符串?

例如,我想搜索第一次出现的"version:"字符串,但不是在文件开头,而是在第 1 行。说 35 其中包含文本*-disk:0,这样我就只能得到磁盘 0 的产品名称,而没有别的。我目前的方法如下line_no行号在哪里。所在的行disk:0disk: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 脚本以表格格式打印信息。

标签: linuxbash

解决方案


sed解决方案:

如果您想在给定的行号(例如)之后搜索第一次出现10

l=10
lshw | sed -n "${l},$ {/version/{p;q}}"

如果您想在给定的行内容之后搜索第一次出现(例如*-disk:0

lshw | sed -n '/*-disk:0/,${/version/{p;q}}'

推荐阅读