Использование awk или подобного, чтобы найти следующее слово в выводе другой команды

Я пытаюсь определить Startsector файла.img из скрипта bash, чтобы он был правильно смонтирован из скрипта. Я использовал команду file, чтобы легко найти Startsector - хотя я не уверен, как извлечь это число из вывода. Я думаю, что ответ заключается в использовании awk, но я не могу понять, как это сделать.

Вот вывод команды file для справки:

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$ 

2 ответа

Решение

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

Если вы измените 1 на любой другой номер в sed -n '1p' это даст вам другие случаи.

Другие вопросы по тегам