행의 X번째 요소를 필터링하시겠습니까?

행의 X번째 요소를 필터링하시겠습니까?

예를 들어, 나는 얻고 싶다세 번째 요소만전화할 때 각 회선은 다음과 같습니다.

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'

또는 -PPCRE 지원(옵션)으로 구축된 GNU grep을 사용하세요.

xinput list | grep -Po '[^ ⎜↳].*?(?=\s+id=.*slave  pointer)'

관련 정보