Wie extrahiere ich nur die Informationen zur Bildschirmauflösung aus der xrandr-Ausgabe?

Wie extrahiere ich nur die Informationen zur Bildschirmauflösung aus der xrandr-Ausgabe?
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 1920x1080von 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)pattern1 Positiver Lookbehind: Überprüfen Sie, ob textvor dem Muster erscheint.

[ ]Zeichensatz. Wird verwendet, um eine Liste von Zeichen zu gruppieren.

\dEine Ziffer. Bedeutet den Bereich0-9

[x\d]Gruppen \dund xzusammen. 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' 'primary1920x1080

Sie können diesen regulären Ausdruck testenHier.

Bearbeiten:Wichtige Notizen.

(1) Mit Grepkönnen SieNURverwenden Sie Lookbehinds mit fester Länge. Beispielsweise echo '012abcde' | grep -oP '(?<=\d{3})\w+'gibt aus, gibt abcdeaber 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)patternnicht (?<=pattern)patternoder (?<=text)pattern.

(2) Gemäß@G-Man sagt: „Monica wieder einsetzen“im Kommentarbereich unten ist die Option -oinGrepNICHTPOSIX-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 cutzweimal 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 xrandreiner solchen Ausgabe recht fehleranfällig ist. Auf meinem System wird beispielsweise xrandr | grep primarynichts 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.

verwandte Informationen