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 1920x1080
desta 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)pattern
1 Lookbehind positivo: Verifique se text
aparece antes do padrão.
[ ]
Conjunto de caracteres. Usado para agrupar uma lista de caracteres.
\d
Um dígito. Significa o intervalo0-9
[x\d]
Grupos \d
e x
juntos. 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)pattern
não é (?<=pattern)pattern
ou (?<=text)pattern
.
(2) De acordo com@G-Man diz ‘Reintegrar Monica’na seção de comentários abaixo, a opção -o
éGrep
NÃ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 -P
que 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 cut
duas 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 xrandr
saída como essa é bastante frágil. No meu sistema por exemplo xrandr | grep primary
nã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.