
예를 들어, 나는 얻고 싶다세 번째 요소만전화할 때 각 회선은 다음과 같습니다.
xinput --list --short|grep "slave pointer"
나는 출력을 얻습니다 :
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=11 [slave pointer (2)]
⎜ ↳ MCE IR Keyboard/Mouse (ite-cir) id=12 [slave pointer (2)]
⎜ ↳ Logitech Unifying Device. Wireless PID:101a id=14 [slave pointer (2)]
"SynPS/2 Synaptics TouchPad"와 같은 이름을 얻고 싶습니다.
어딘가에서 awk와 print를 사용하는 솔루션을 보았지만 이를 달성할 수 있는 더 간단한 솔루션은 없습니다.아니요 awk
아니면 perl
이런 것?
답변1
멍청한예이런 종류의 작업은 매우 간단하지만 다음을 사용할 수도 있습니다 cut
.
xinput --list --short|grep "slave pointer" | cut -f 1
여기에는 선행 공백과 ↳
문자도 포함됩니다. 이러한 문제를 제거해야 하는 경우 다음을 시도해 보십시오.
xinput --list --short|grep "slave pointer" | cut -f 1 | cut -d" " -f 5-
답변2
세 번째 요소라면 'SynPS/2 Synaptics TouchPad'가 아닌 'SynPS/2'입니다.
여기서 달성할 수 있는 최선의 방법은 앞에 오는 내용을 보고하는 것입니다. id=
왜냐하면 이것이 장치 이름이 끝나는 위치를 식별할 수 있는 유일한 방법이기 때문입니다.
xinput list | sed -n 's/^[ ⎜↳]*\(.*[^[:blank:]]\)[[:blank:]]*id=.*slave pointer.*/\1/p'
또는 -P
PCRE 지원(옵션)으로 구축된 GNU grep을 사용하세요.
xinput list | grep -Po '[^ ⎜↳].*?(?=\s+id=.*slave pointer)'