我需要在setxkbmap
启动 Wine 游戏之前设置键盘布局,因为我使用 Dvorak 进行打字,这会破坏每个游戏的控制。我想做的只是编写一个脚本,在开始游戏之前获取当前的键盘布局,将其存储在变量中,然后在游戏完成后恢复它:
ORIGINAL_LAYOUT=`setxkbmap -query | grep -P 'layout\:\s{5}(\w+)'`
setxkbmap us
wine ...
setxkbmap $ORIGINAL_LAYOUT
我遇到的问题是 grep 匹配整行,而不仅仅是我的捕获组。有没有办法让我简单地转储匹配的捕获组?
例如, 的输出setxkbmap -query
是:
rules: evdev
model: pc105
layout: dvorak
我有兴趣抓住布局。
答案1
您可以使用-o
并稍微更改 grep
-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+'`
我们更改了正则表达式以使用后视,因此它不是匹配的一部分
答案2
尝试使用这个awk
命令:
setxkbmap -query | grep layout | awk '{print $2}'
或使用cut
命令
setxkbmap -query | grep layout | cut -d : -f2