한 줄에 여러 패턴 일치

한 줄에 여러 패턴 일치

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우리가 제공한 입력의 첫 번째 및 두 번째 단어를 바인딩합니다. 우리는 에서 해당 입력을 얻습니다 <(...). 서브셸에서 <(...)실행 ...하고 출력을 읽을 수 있는 파이프에 연결합니다. read첫 번째 단어를 파이프라인으로 파이프 하면 파이프 <라인이 이를 가져와서 /dev/pts/X /dev/pts/Y우리가 원하는 두 단어로 분할합니다.

그런 다음 필요에 따라 실행할 수 있습니다 someprogram $left.microcom $right

관련 정보