Como extrair apenas as informações de resolução de tela da saída do xrandr?

Como extrair apenas as informações de resolução de tela da saída do xrandr?
xrandr | grep primary

retornar

eDP-1-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 193mm

Estou interessado apenas nosubstring de resolução 1920x1080desta saída.

Como faço para extraí-lo?

Responder1

$ 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

Você não precisa do grep quando estiver usando o awk, aliás, isso é tudo que você precisa:

xrandr | awk -F'[ +]' '/primary/{print $4}'

Responder2

Basta executar isso,

xrandr | grep -oP '(?<=primary )[x\d]+'

Isso produz1920x1080

Então, como isso funciona?

(?<=pattern)pattern1 Lookbehind positivo: Verifique se textaparece antes do padrão.

[ ]Conjunto de caracteres. Usado para agrupar uma lista de caracteres.

\dUm dígito. Significa o intervalo0-9

[x\d]Grupos \de xjuntos. Significa uma lista de dígitos ex. O que significa basicamente issox0123456789

+Corresponde a um ou mais do grupo anterior.

Então, (?<=primary )[x\d]+baixalmente significa corresponder à lista de caracteres x0123456789(por exemplo1920x1080) que aparece após o texto 'primary '. Observe que há um caractere de espaço ' 'depois de primary. E somente essa combinação no seu caso seria1920x1080

Você pode testar este regexaqui.

Editar:Anotações importantes.

(1) Com Grep, você podeAPENASuse lookbehinds de comprimento fixo. Por exemplo, echo '012abcde' | grep -oP '(?<=\d{3})\w+'gera abcde, mas echo '012abcde' | grep -oP '(?<=\d+)\w+'gera o erro grep: lookbehind assertion is not fixed length. Assim, paraGrepo modelo dePositivoeuookbehind (?<=fixed_length_pattern)patternnão é (?<=pattern)patternou (?<=text)pattern.

(2) De acordo com@G-Man diz ‘Reintegrar Monica’na seção de comentários abaixo, a opção -oéGrepNÃOCompatível com POSIX. O que significa que pode não haver muitos dispositivos mais antigos. Embora, pela minha experiência pessoal, os dispositivos atualizados nos últimos 4 anos devam funcionar bem. Outros dispositivos também podem funcionar. Não posso ser mais específico porque não tenho muitos dispositivos para testar.

(3) Novamente de acordo comG-Homem, a Asserção Lookbehind é suportada quando você passa o parâmetro -Pque habilita a expressão regular compatível com Perl (PCRE). O que, novamente, pode não ser compatível com muitos dispositivos mais antigos. Mas, novamente, pela minha experiência, funciona bem em dispositivos recentes.

Responder3

Nesse caso específico, você pode usar cutduas vezes:

$ 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

Observe, porém, que a análise da xrandrsaída como essa é bastante frágil. No meu sistema por exemplo xrandr | grep primarynão retorna nada e a resolução está no 3º campo, não no 4º.

Responder4

xrandr | grep '*' | awk '{print $1}'

Esta me pareceu a solução mais simples, tenho dois monitores e obtenho saída para ambos.

informação relacionada