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)')

関連情報