richtiges Werkzeug, um die UUID aus der Ausgabe von blkid zu filtern (mit grep, cut oder awk, e.t.c)

7

Ich möchte die Ausgabe von blkid filtern, um die UUID zu erhalten.

Die Ausgabe von blkid sieht wie

aus

Fall 1: -

%Vor%

In einigen Fällen sieht die Ausgabe von blkid wie

aus

FALL 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.

    
Talespin_Kit 26.11.2012, 13:17
quelle

4 Antworten

4

Für alle UUIDs können Sie Folgendes tun:

%Vor%

Sprich nur für eine bestimmte sda1:

%Vor%

Der Befehl sed versucht, die in den Anführungszeichen enthaltenen Inhalte nach dem Schlüsselwort UUID zu gruppieren und ersetzt die gesamte Zeile durch das Token.

    
Guru 26.11.2012, 13:26
quelle
36

Warum machst du es so komplex?

Versuchen Sie Folgendes:

%Vor%

Oder das:

%Vor%

Installieren Sie das richtige blkid-Paket, wenn Sie es nicht haben:

%Vor%     
Vanuan 29.04.2013 11:42
quelle
2

Hier ist eine kurze awk Lösung:

%Vor%

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
  • Dies basiert auf der konsistenten Struktur von blkid output: UUID in Anführungszeichen steht am Ende jeder Zeile.

Alternativ:

%Vor%     
sampson-chen 26.11.2012 16:07
quelle
0

data.txt

%Vor%

awk und sed kombination

%Vor%

Erklärung:

  1. Setzen Sie das Feldtrennzeichen auf die Zeichenfolge 'UUID', gibt die restliche Ausgabe
  2. Verwenden Sie sed, um = und " wie gezeigt zu entfernen, wobei -e ein Schalter ist, sodass Sie mehrere sed-Befehle / Ausdrücke in einem geben können.
  3. Alle Vorkommen von " werden mit der Endoption g , d. h. global.
  4. , entfernt
mtk 26.11.2012 15:59
quelle

Tags und Links