Obter Variáveis do Grep Output

0

Estou executando um comando grep e obtendo a saída abaixo:

user@hostname:~$ ps -o args | grep lp_ | grep -v grep | sort -n
/usr/local/bin/lp_server -n 5964 -d /dev/usb/lp1
/usr/local/bin/lp_server -n 5965 -d /dev/usb/lp0
{lp_supervisor} /bin/sh /usr/local/lp/lp_supervisor /dev/usb/lp0 SAMPLESERIAL1 /var/run/lp/lp_pid/usb_lp0
{lp_supervisor} /bin/sh /usr/local/lp/lp_supervisor /dev/usb/lp1 SAMPLESERIAL2 /var/run/lp/lp_pid/usb_lp1

A meta final é ter SAMPLESERIAL1 (3ª linha) atribuído com a porta 5964 e SAMPLESERIAL2 (quarta linha) atribuída com a porta 5965 (há tempo em que essas portas são invertidas, como você pode ver acima )

Preciso verificar qual /dev/usb/lp# está atribuído a qual porta.

Em seguida, verifique qual /dev/usb/lp# é atribuído a qual SAMPLESERIAL#

Eventualmente, terei algo como:

if SAMPLESERIAL1 is set to 5964:
    do nothing
else:
    run command to change

Não tenho certeza da melhor maneira de fazer isso. Eu não sou muito experiente com bash. Meu pensamento original era tentar analisar a saída em variáveis, mas pode haver uma maneira mais eficiente de fazer isso. Eu estou executando isso no tinycore linux se isso ajuda em tudo. .

    
por ctrl-alt-delor 04.07.2018 / 13:30

1 resposta

0

Você pode usar o regex avançado (olhar positivo para trás / para frente):

SAMPLESERIAL1=$(ps -o args | grep -Po '(?<=lp_server -n )[[:digit:]]+(?= -d \/dev\/usb\/lp1)')
    
por 25.07.2018 / 14:03