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.