xrandr | grep primary
zurückkehren
eDP-1-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
Mich interessiert nur dieAuflösungs-Teilzeichenfolge 1920x1080
von dieser Ausgabe.
Wie gehe ich beim Extrahieren vor?
Antwort1
$ echo 'eDP-1-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 193mm' |
awk -F'[ +]' '{print $4}'
1920x1080
Sie brauchen grep übrigens nicht, wenn Sie awk verwenden. Das ist alles, was Sie brauchen:
xrandr | awk -F'[ +]' '/primary/{print $4}'
Antwort2
Führen Sie dies einfach aus.
xrandr | grep -oP '(?<=primary )[x\d]+'
Dies gibt1920x1080
Also, wie funktioniert das?
(?<=pattern)pattern
1 Positiver Lookbehind: Überprüfen Sie, ob text
vor dem Muster erscheint.
[ ]
Zeichensatz. Wird verwendet, um eine Liste von Zeichen zu gruppieren.
\d
Eine Ziffer. Bedeutet den Bereich0-9
[x\d]
Gruppen \d
und x
zusammen. Bedeutet eine Liste von Ziffern und x. Was im Grunde bedeutet, dassx0123456789
+
Stimmt mit einem oder mehreren der vorherigen Gruppen überein.
Das (?<=primary )[x\d]+
bedeutet im Wesentlichen, dass die Liste der Zeichen übereinstimmt x0123456789
(z.B1920x1080), das nach dem Text erscheint . Beachten Sie, dass nach 'primary '
ein Leerzeichen steht . Und nur eine solche Übereinstimmung wäre in Ihrem Fall' '
primary
1920x1080
Sie können diesen regulären Ausdruck testenHier.
Bearbeiten:Wichtige Notizen.
(1) Mit Grep
können SieNURverwenden Sie Lookbehinds mit fester Länge. Beispielsweise echo '012abcde' | grep -oP '(?<=\d{3})\w+'
gibt aus, gibt abcde
aber echo '012abcde' | grep -oP '(?<=\d+)\w+'
den Fehler aus grep: lookbehind assertion is not fixed length
. Daher fürGrepdie Vorlage vonPpositivMookbehind ist (?<=fixed_length_pattern)pattern
nicht (?<=pattern)pattern
oder (?<=text)pattern
.
(2) Gemäß@G-Man sagt: „Monica wieder einsetzen“im Kommentarbereich unten ist die Option -o
inGrep
NICHTPOSIX-kompatibel. Das bedeutet, dass es möglicherweise nicht viele ältere Geräte gibt. Aus meiner persönlichen Erfahrung sollten Geräte, die in den letzten 4 Jahren aktualisiert wurden, jedoch einwandfrei funktionieren. Andere Geräte könnten ebenfalls funktionieren. Ich kann nicht genauer sein, da ich nicht so viele Geräte zum Testen habe.
(3) Wiederum gemäßG-Man, Lookbehind Assertion wird unterstützt, wenn Sie den Parameter übergeben -P
, der Perl-kompatible reguläre Ausdrücke (PCRE) aktiviert. Dies wird möglicherweise auf vielen älteren Geräten nicht unterstützt. Aber meiner Erfahrung nach funktioniert es auf neueren Geräten einwandfrei.
Antwort3
In diesem speziellen Fall können Sie es cut
zweimal verwenden:
$ echo 'eDP-1-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 193mm' | cut -d ' ' -f4 | cut -d+ -f1
1920x1080
Beachten Sie jedoch, dass das Parsen xrandr
einer solchen Ausgabe recht fehleranfällig ist. Auf meinem System wird beispielsweise xrandr | grep primary
nichts zurückgegeben und die Auflösung liegt im 3. Feld, nicht im 4.
Antwort4
xrandr | grep '*' | awk '{print $1}'
Dies schien mir die einfachste Lösung zu sein, ich habe zwei Monitore und erhalte die Ausgabe für beide.