从 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 行)分配端口5964,为SAMPLESERIAL2(第 4 行)分配端口5965(有时这些端口会翻转,如上所示)

我需要检查哪个端口/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)')

相关内容