grep můžete přeskočit a získejte to za jediný awk :
xrandr | awk 'NF >= 3 && /[0-9]+x[0-9]+/ {sub(/[+-].*/, "", $3); print $3}'
1920x1200
1920x1200
primary
1029x1200
Alternativní single gnu grep řešení:
xrandr | grep -oP 'connected\h+\K(\d+x\d+|\S+)'
(.*\d+x\d+)*^(?![\+]+\d\+\d) vzor porovnává a zachycuje do skupiny 1 volitelnou posloupnost jakéhokoli nula nebo více znaků jiných než znaků zalomení řádků, pokud možno, pak 1+ číslice, x , 1+ číslice a pak vyžaduje začátek pozice řetězce (v důsledku toho vzor vždy selže! ) a zajišťuje, že neexistuje jeden nebo více + znaky, číslice, + a číslici hned napravo od aktuální polohy. Toto vypadá jako velmi poškozený vzor, který nikdy neodpovídá žádnému řetězci.
Vaši logiku lze implementovat jako
xandr | grep -oP '\b\d+x\d+(?!(?:\+\d+\+)?\d)'
Podívejte se na online demo a regex demo.
Podrobnosti :
-oP- výstup se pouze shoduje a povolí modul regulárních výrazů PCRE\b\d+x\d+(?!(?:\+\d+\+)?\d):\b- hranice slova\d+- jedna nebo více číslicx-x\d+- jedna nebo více číslic(?!(?:\+\d+\+)?\d)- negativní výhled, který selže, pokud hned napravo od aktuálního umístění existuje(?:\+\d+\+)?- volitelná sekvence+, jedna nebo více číslic a+\d- číslice.
Magento 2 - Po přidání do košíku se stránka košíku zobrazuje prázdná
Proč wprintf v Linuxu přepisuje ruský text v Unicode do latinky?