打印命令输出的特定部分

打印命令输出的特定部分

所以,这里有一个简单的命令:

xset -q | grep -e Num -e Caps

该命令的输出是:

00: Caps Lock:   off    01: Num Lock:    on     02: Scroll Lock: off

我想知道的是,是否有可能只打印开启和关闭的部分,例如,

  • off仅在之后打印Caps Lock
  • on仅在之后打印Num Lock

例如,如果我需要获取 Caps Lock 的状态,我需要运行命令,使得输出仅为

off或者on

答案1

使用grep

% xset -q | grep -Eo '(Caps Lock|Num Lock):[[:blank:]]+[^[:blank:]]+'
Caps Lock:   off
Num Lock:    on
  • (Caps Lock|Num Lock)匹配Caps LockNum Lock

  • 上面的后面跟着:字符类,然后[[:blank:]]匹配一个或多个空格或制表符

  • 它们[^[:blank:]]+将匹配下一个空格或制表符之前的一个或多个字符,即onoff

答案2

您也可以使用 AWK。它允许打印列(默认情况下假定列以空格分隔)

xieerqi:$ xset -q | awk '/Caps/'                                                                      
    00: Caps Lock:   off    01: Num Lock:    off    02: Scroll Lock: off
xieerqi:$ xset -q | awk '/Caps Lock/ {print $4" "$8}'                                                 
off off

相关内容