行のX番目の要素をフィルタリングしますか?

行のX番目の要素をフィルタリングしますか?

例えば、手に入れたい3番目の要素のみ電話をかけると、各回線は次のようになります。

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

3番目の要素は「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)'

関連情報