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 1920x1080
de 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)pattern
1 Búsqueda atrás positiva: compruebe si text
aparece antes del patrón.
[ ]
Conjunto de caracteres. Se utiliza para agrupar una lista de caracteres.
\d
Un dígito. Significa el rango0-9
[x\d]
Grupos \d
y x
juntos. 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 abcde
pero echo '012abcde' | grep -oP '(?<=\d+)\w+'
genera el error grep: lookbehind assertion is not fixed length
. Así, paragrepla plantilla dePAGpositivolookdehind no (?<=fixed_length_pattern)pattern
es (?<=pattern)pattern
o (?<=text)pattern
.
(2) Según@G-Man dice 'Reintegrar a Mónica'en la sección de comentarios a continuación, la opción -o
en Grep
esNOCompatible 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 -P
que 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 cut
dos 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 xrandr
resultados de esta manera es bastante frágil. En mi sistema, por ejemplo, xrandr | grep primary
no 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.