Puoi saltare grep
e fallo in un unico awk
:
xrandr | awk 'NF >= 3 && /[0-9]+x[0-9]+/ {sub(/[+-].*/, "", $3); print $3}'
1920x1200
1920x1200
primary
1029x1200
Singolo alternativo gnu grep
soluzione:
xrandr | grep -oP 'connected\h+\K(\d+x\d+|\S+)'
Il (.*\d+x\d+)*^(?![\+]+\d\+\d)
pattern corrisponde e cattura nel Gruppo 1 una sequenza facoltativa di zero o più caratteri diversi dai caratteri di interruzione di riga, il maggior numero possibile, quindi 1+ cifre, x
, 1+ cifre, quindi richiede l'inizio della posizione della stringa (questo fa fallire sempre il modello! ) e si assicura che non ci siano uno o più +
caratteri, una cifra, un +
e una cifra immediatamente a destra della posizione corrente. Sembra uno schema molto corrotto che non corrisponde mai a nessuna stringa.
La tua logica può essere implementata come
xandr | grep -oP '\b\d+x\d+(?!(?:\+\d+\+)?\d)'
Guarda la demo online e la demo regex.
Dettagli :
-oP
- l'output corrisponde solo e abilita il motore regex PCRE\b\d+x\d+(?!(?:\+\d+\+)?\d)
:\b
- confine di parola\d+
- una o più cifrex
- unx
\d+
- una o più cifre(?!(?:\+\d+\+)?\d)
- un lookahead negativo che fallisce la corrispondenza se, immediatamente a destra della posizione corrente, c'è(?:\+\d+\+)?
- una sequenza facoltativa di+
, una o più cifre e+
\d
- una cifra.