Frage Mit awk o.ä. finden Sie das nächste Wort in der Ausgabe eines anderen Befehls


Ich versuche, den Startsektor einer IMG-Datei innerhalb eines Bash-Skripts zu ermitteln, damit es im Skript korrekt eingebunden werden kann. Ich habe den Dateibefehl benutzt, um den Startsektor leicht zu finden - wie auch immer ich nicht sicher bin, wie man diese Nummer aus der Ausgabe extrahiert. Ich denke, die Antwort liegt in der Verwendung von Awk, aber ich kann nicht für das Leben von mir herausfinden, wie es geht.

Hier ist die Ausgabe des Dateibefehls als Referenz:

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$ 

4
2017-08-08 20:23


Ursprung




Antworten:


Mit sed oder perl ist es etwas einfacher als mit awk. Mit sed: Suche nach der ganzen Linie partition 1 gefolgt von startsector 1234 (oder jede andere Ziffernfolge) mit Nein ; zwischen. Ersetzen Sie die gesamte Zeile durch die Ziffer und drucken Sie das Ergebnis. Du kannst ändern partition 1 zu partition 2, Na sicher.

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

Mit Perl: Suche nach einem Teilstring bestehend aus partition 1 gefolgt von startsector 1234 ohne ; zwischen; Speichere die Ziffern danach startsector in einer Gruppe. Wenn es eine Übereinstimmung gibt, drucken Sie die Ziffern aus.

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

2
2017-08-08 20:49



Perfekt danke! - kemra102


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

Wenn du dich änderst 1 zu einer anderen Nummer in sed -n '1p' es wird dir die anderen Vorkommen geben.


2
2017-08-08 20:29



file 2012-07-15-wheezy-raspbian.img | grep -oP '(?<=startsector )[0-9]+' (die Ausgabe des ursprünglichen Befehls nach grep zu leiten) würde dasselbe erreichen. - reverendj1
Guter Punkt. Ich habe ihn falsch verstanden und dachte, dass er ein anderes Programm benutzt, um die Ausgabe zu bekommen, die er gepostet hat. - con-f-use
Danke beiden - es tut sicherlich, was ich gefragt habe. Eine letzte Sache, wie bekomme ich es, um nur das erste aus den Ergebnissen zu zeigen? Ich habe versucht, die Option -m, aber es gibt mir immer 2 Ergebnisse, auch wenn ich 1 angeben. Mein derzeitiges Denken als diese Option scheint nicht zu funktionieren, ist es durch den Kopf danach. - kemra102
Siehe die Bearbeitung meiner Antwort. - con-f-use