1行に複数のパターンを一致させる

1行に複数のパターンを一致させる

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

これは少しトリックです。(、、、、)および文字を何も置き換えることなく<、シェルの単語分離機能に依存します。=>

tty0tty出力をパイプで接続して、head出力の最初の(唯一の)行だけを取得し、永久にブロックしません。そこからsed置換を実行するコマンドに入り、シェルのreadbultinを使用してシェル変数leftright私たちが提供した入力の最初と2番目の単語をバインドします。我々はから対応する入力を取得します<(...)。サブシェルで<(...)実行し...、出力を読み取ることができるパイプに接続します。read最初の単語をパイプラインにパイプすると、パイプラインはそれをインポート<して/dev/pts/X /dev/pts/Y2つの単語に分割します。

その後、必要に応じて実行できますsomeprogram $leftmicrocom $right

関連情報