Grep 출력에서 ​​변수 가져오기

Grep 출력에서 ​​변수 가져오기

grep 명령을 실행하고 다음 출력을 얻습니다.

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

최종 목표는 SAMPLESERIAL1(라인 3)에 포트를 할당 하고 (라인 4) 5964에 포트를 할당하는 것 입니다 (때때로 이러한 포트는 위에 표시된 것처럼 반전됩니다).SAMPLESERIAL25965

/dev/usb/lp#어떤 포트가 어떤 포트에 할당되어 있는지 확인해야 합니다 .

그런 다음 어느 것이 /dev/usb/lp#어느 것에 할당되었는지 확인하십시오.SAMPLESERIAL#

결국 나는 다음과 같이 끝날 것입니다.

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

이 문제를 해결하는 가장 좋은 방법이 확실하지 않습니다. 나는 bash에 대한 경험이 많지 않습니다. 내 초기 생각은 출력을 변수로 구문 분석하는 것이었지만 이를 수행하는 더 효율적인 방법이 있을 수 있습니다. 도움이 된다면, 저는 이것을 Tinycore Linux에서 실행하고 있습니다. .

답변1

고급 정규식을 사용할 수 있습니다(앞/뒤 보기):

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

관련 정보