¿Cómo extraer solo la información de resolución de pantalla de la salida xrandr?

¿Cómo extraer solo la información de resolución de pantalla de la salida xrandr?
xrandr | grep primary

devolver

eDP-1-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 193mm

Me interesa solo elsubcadena de resolución 1920x1080de esta salida.

¿Cómo hago para extraerlo?

Respuesta1

$ 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

No necesitas grep cuando usas awk, por cierto, esto es todo lo que necesitas:

xrandr | awk -F'[ +]' '/primary/{print $4}'

Respuesta2

Simplemente ejecuta esto,

xrandr | grep -oP '(?<=primary )[x\d]+'

Esto produce1920x1080

Entonces, ¿cómo funciona esto?

(?<=pattern)pattern1 Búsqueda atrás positiva: compruebe si textaparece antes del patrón.

[ ]Conjunto de caracteres. Se utiliza para agrupar una lista de caracteres.

\dUn dígito. Significa el rango0-9

[x\d]Grupos \dy xjuntos. Significa una lista de dígitos y x. Lo que significa básicamente estox0123456789

+Coincide con uno o más del grupo anterior.

Entonces, (?<=primary )[x\d]+básicamente significa coincidir con la lista de caracteres x0123456789(p.ej1920x1080) que aparece después del texto 'primary '. Observe que hay un carácter de espacio ' 'después primary. Y sólo esa coincidencia en su caso sería1920x1080

Puedes probar esta expresión regular.aquí.

Editar:Notas importantes.

(1) Con Grep, puedesSOLOUtilice retrospectivas de longitud fija. Por ejemplo, echo '012abcde' | grep -oP '(?<=\d{3})\w+'genera abcdepero echo '012abcde' | grep -oP '(?<=\d+)\w+'genera el error grep: lookbehind assertion is not fixed length. Así, paragrepla plantilla dePAGpositivolookdehind no (?<=fixed_length_pattern)patternes (?<=pattern)patterno (?<=text)pattern.

(2) Según@G-Man dice 'Reintegrar a Mónica'en la sección de comentarios a continuación, la opción -oen GrepesNOCompatible con POSIX. Lo que significa que puede que no sean muchos los dispositivos más antiguos. Aunque, según mi experiencia personal, los dispositivos que se actualizaron en los últimos 4 años deberían funcionar bien. Es posible que otros dispositivos también funcionen. No puedo ser más específico ya que no tengo tantos dispositivos para probar.

(3) De nuevo segúnG-Man, Lookbehind Assertion se admite cuando se pasa el parámetro -Pque habilita la expresión regular compatible con Perl (PCRE). Lo cual, nuevamente, podría no ser compatible con muchos dispositivos más antiguos. Pero, nuevamente, según mi experiencia, funciona bien en dispositivos recientes.

Respuesta3

En ese caso particular puedes usar cutdos veces:

$ 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

Sin embargo, tenga en cuenta que analizar xrandrresultados de esta manera es bastante frágil. En mi sistema, por ejemplo, xrandr | grep primaryno devuelve nada y la resolución está en el tercer campo, no en el cuarto.

Respuesta4

xrandr | grep '*' | awk '{print $1}'

Esta me pareció la solución más sencilla, tengo dos monitores y obtengo la salida para ambos.

información relacionada