在一行上匹配多个模式

在一行上匹配多个模式

我经常使用一个名为 的程序tty0tty,它使用 PTY 创建一个空调制解调器。现在我想让它成为自动化流程的一部分。

当我启动时tty0tty它打印

(/dev/pts/1) <=> (/dev/pts/2)

是否可以解析输出并将匹配结果用作另一个程序的参数?这样以下几行就可以自动化:

linux$ tty0tty &
(/dev/pts/X) <=> (/dev/pts/Y)
linux$ someprogram /dev/pts/X &
linux$ microcom /dev/pts/Y

答案1

您可以使用sed流程替代:

read left right < <(tty0tty | head -n 1 | sed -e 's/[()<=>]//g' &)

之后,$left/dev/pts/Xright/dev/pts/Y

这有点作弊 - 我们只是将字符(, ), <, =, 和替换>为空,然后依赖 shell 的分词功能。

我们通过管道将tty0tty输出输入,head因此我们只获取第一行(唯一的)输出,并且不会永远阻塞。从那里它进入sed执行替换的命令,然后使用 shell 的readbultin 绑定 shell 变量left以及right我们给它的输入的第一个和第二个单词。我们从 中获取该输入<(...)。在子 shell 中<(...)运行...并将其输出连接到我们可以读取的管道。我们将read第一个管道输入到管道中<,因此它会得到/dev/pts/X /dev/pts/Y并将其分成我们想要的两个单词。

之后你就可以根据需要运行someprogram $left了。microcom $right

相关内容