Ich möchte die Ausgabe von blkid filtern, um die UUID zu erhalten.
Die Ausgabe von blkid sieht wie
ausFall 1: -
%Vor%In einigen Fällen sieht die Ausgabe von blkid wie
ausFALL 2: -
%Vor%Ich möchte die UUID herausfiltern.
Wenn Sie grep und cut verwenden, können Sie dies als
tun %Vor%Ich habe versucht, awk , grep und cut zu verwenden, um die UUID
zu filtern %Vor%Der obige Befehl (der awk verwendet) ist nicht zuverlässig, da manchmal ein zusätzliches Feld wie LABEL in der Ausgabe des blkid -Programms vorhanden sein kann, wie in der obigen Ausgabe gezeigt.
Was ist der beste Weg, um einen Befehl mit awk zu erstellen, der zuverlässig funktioniert? Bitte posten Sie, wenn eine andere elegante Methode für den Job mit bin und core utils existiert. Ich möchte nicht Perl oder Python verwenden, da dies auf busybox ausgeführt werden muss.
HINWEIS: -Ich verwende busybox blkid, für das / dev / sda1 nicht als Argument übergeben werden kann (die Version, die ich verwende, unterstützt es nicht) der Grep zum Filtern der Linie.
UPDATE: - hat die FALL 2: -Ausgabe hinzugefügt, um anzuzeigen, dass die Feldposition nicht zuverlässig ist.
Hier ist eine kurze awk
Lösung:
Ausgabe:
%Vor%Erläuterung:
BEGIN{FS="[=\"]"}
: Verwenden Sie =
und "
als Trennzeichen {print $(NF-1)}
: NF
steht für Anzahl der Felder; Hier drucken wir das vorletzte Feld UUID
in Anführungszeichen steht am Ende jeder Zeile. Alternativ:
%Vor%awk
und sed
kombination
gibt die restliche Ausgabe =
und "
wie gezeigt zu entfernen, wobei -e
ein Schalter ist, sodass Sie mehrere sed-Befehle / Ausdrücke in einem geben können. "
werden mit der Endoption g
, d. h. global.