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