Imprime uma parte específica da saída de um comando

1

Então, aqui eu tenho um simples comando:

xset -q | grep -e Num -e Caps

A saída do comando é:

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

O que eu quero saber é que existem possibilidades de imprimir apenas as partes ligadas e desativadas, como

  • imprima apenas off após Caps Lock
  • imprima apenas on após Num Lock

Por exemplo, se eu precisar obter o status de Caps Lock, preciso executar o comando de modo que a saída seja apenas

off ou on

    
por Raphael 29.11.2015 / 07:30

2 respostas

2

Usando grep :

% xset -q | grep -Eo '(Caps Lock|Num Lock):[[:blank:]]+[^[:blank:]]+'
Caps Lock:   off
Num Lock:    on
  • (Caps Lock|Num Lock) corresponde a Caps Lock ou Num Lock

  • o texto acima será seguido por : e, em seguida, a classe de caractere [[:blank:]] corresponderá a um ou mais espaço ou guia

  • Esses [^[:blank:]]+ corresponderão a um ou mais caracteres antes do próximo espaço ou guia, por exemplo, on ou off .

por heemayl 29.11.2015 / 07:36
2

Você também pode usar o AWK. Permite imprimir colunas (que por padrão são consideradas separadas por espaço)

xieerqi:$ xset -q | awk '/Caps/'                                                                      
    00: Caps Lock:   off    01: Num Lock:    off    02: Scroll Lock: off
xieerqi:$ xset -q | awk '/Caps Lock/ {print " "}'                                                 
off off
    
por Sergiy Kolodyazhnyy 29.11.2015 / 07:48