Puedes omitir grep y haz esto en un solo awk :
xrandr | awk 'NF >= 3 && /[0-9]+x[0-9]+/ {sub(/[+-].*/, "", $3); print $3}'
1920x1200
1920x1200
primary
1029x1200
Soltero alternativo gnu grep solución:
xrandr | grep -oP 'connected\h+\K(\d+x\d+|\S+)'
El (.*\d+x\d+)*^(?![\+]+\d\+\d) el patrón coincide y captura en el Grupo 1 una secuencia opcional de cero o más caracteres que no sean caracteres de salto de línea, tantos como sea posible, luego 1+ dígitos, x , 1+ dígitos, y luego requiere el inicio de la posición de la cadena (¡esto hace que el patrón falle todo el tiempo! ) y se asegura de que no haya uno o más + caracteres, un dígito, un + y un dígito inmediatamente a la derecha de la ubicación actual. Parece un patrón muy corrupto que nunca coincide con ninguna cadena.
Su lógica se puede implementar como
xandr | grep -oP '\b\d+x\d+(?!(?:\+\d+\+)?\d)'
Vea la demostración en línea y la demostración de expresiones regulares.
Detalles :
-oP- la salida solo coincide y habilita el motor de expresiones regulares PCRE\b\d+x\d+(?!(?:\+\d+\+)?\d):<último>\b- límite de palabras\d+- uno o más dígitosx- unx\d+- uno o más dígitos(?!(?:\+\d+\+)?\d)- una anticipación negativa que falla la coincidencia si, inmediatamente a la derecha de la ubicación actual, hay(?:\+\d+\+)?- una secuencia opcional de+, uno o más dígitos y+\d- un dígito.