Tente usar este comando awk
:
setxkbmap -query | grep layout | awk '{print $2}'
ou use o comando cut
setxkbmap -query | grep layout | cut -d : -f2
Eu preciso definir o layout do meu teclado com setxkbmap
antes de lançar os jogos do Wine, já que uso o Dvorak para digitar e isso quebra todos os controles do jogo. O que eu gostaria de fazer é simplesmente escrever um script que pegue o layout do teclado atual antes de iniciar o jogo, armazene-o em uma variável e depois restaure-o após o término do jogo:
ORIGINAL_LAYOUT='setxkbmap -query | grep -P 'layout\:\s{5}(\w+)''
setxkbmap us
wine ...
setxkbmap $ORIGINAL_LAYOUT
O problema que estou tendo é que o grep corresponde à linha inteira e não apenas ao meu grupo de captura. Existe uma maneira de simplesmente despejar o grupo de captura correspondente?
Por exemplo, a saída de setxkbmap -query
é:
rules: evdev
model: pc105
layout: dvorak
Estou interessado em pegar o layout.
Você pode usar -o
e alterar o grep um pouco
-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with each such
part on a separate output line.
.
ORIGINAL_LAYOUT='setxkbmap -query | grep -oP '(?<=layout\:\s{5})\w+''
Nós mudamos o regex para usar um look-behind, então não faz parte do jogo
Tags grep regular-expression