使用 awk 或类似命令在另一个命令的输出中查找下一个单词

使用 awk 或类似命令在另一个命令的输出中查找下一个单词

我正在尝试从 bash 脚本中确定 .img 文件的起始扇区,以便可以从脚本中正确挂载它。我一直在使用文件命令轻松找到起始扇区 - 但是我不确定如何从输出中提取该数字。我认为答案在于使用 awk,但我无论如何也想不出如何做到这一点。

以下是文件命令的输出,供参考:

kemra102@kaon:~/Downloads$ file 2012-07-15-wheezy-raspbian.img
2012-07-15-wheezy-raspbian.img: x86 boot sector; partition 1: ID=0xc, starthead 130, startsector 8192, 114688 sectors; partition 2: ID=0x83, starthead 165, startsector 122880, 3665920 sectors, code offset 0xb8
kemra102@kaon:~/Downloads$ 

答案1

使用 sed 或 perl 比使用 awk 要简单一些。使用 sed:匹配整行,查找后面partition 1跟着startsector 1234(或任何其他数字序列)且;中间没有数字的行。用数字替换整行,然后打印结果。当然,您可以更改partition 1为。partition 2

sed -n 's/^.*partition 1:[^;]* startsector \([0-9][0-9]*\).*$/\1/p'

使用 perl:查找由和partition 1组成且中间startsector 1234没有 的子字符串;;将后面的数字保存startsector在一个组中。如果匹配,则打印数字。

perl -l -ne '/partition 1:[^;]* startsector ([0-9]+)/ and print $1'

答案2

file 2012-07-15-wheezy-raspdian.img     | \
    grep -oP '(?<=startsector )[0-9]+'  | \
    sed -n '1p'

如果您将其更改1为其他任何数字,sed -n '1p'它将为您提供其他出现的情况。

相关内容