どこかに簡単な答えがあるようですが、見つからないのでここに質問します。
.NETを使用してワイヤレスUSBキーボードを無効にするスクリプトを作成したいと思いますxinput --disable
。
私はxinput list | grep 2.4G\ Composite\ Devic
次のような結果を得ました。
↳ 2.4G Composite Devic id=29 [slave keyboard (3)]
id=
これで、この場合、パイプで接続できる一般的な数値形式で29を取得する方法に関する問題が解決されました。xinput --disable
答え1
オプション引数は、xinput
デバイス名を文字列として受け入れます。
$ xinput --list --id-only '2.4G Composite Devic'
29
$ xinput --disable '2.4G Composite Devic' # Equivalent to 'xinput --disable 29'
- フルネームでなければなりません(ワイルドカードや正規表現パターンを含めることはできません)。
答え2
それでも正規表現が必要な場合、Perlベースのソリューションは次のようになります。
echo "↳ 2.4G Composite Devic id=29 [slave keyboard (3)]" | perl -pe 's/.*id=(\d+)\s.*/$1/g'
答え3
使用awk
:
echo "2.4G Composite Devic id=29 [slave keyboard (3)]" | awk '{gsub(/id=/,"",$4); print $4}'
29
使用sed
:
echo "2.4G Composite Devic id=29 [slave keyboard (3)]" | sed 's/.*id\=\([0-9]\+\).*/\1/g'
29
grepを使用してください:
echo "2.4G Composite Devic id=29 [slave keyboard (3)]" | grep -Eo 'id=[0-9]+' | grep -Eo '[0-9]+'
29
答え4
sed
はhereの親セットなので、grep
次のようにすることができます。
xinput list |
sed -n '/.*2\.4G Composite Devic.*id=\([[:digit:]]\{1,\}\).*/\1/p'
拡張正規表現をsed
サポートするとより明確になります。-E
xinput list |
sed -nE '/.*2\.4G Composite Devic.*id=([[:digit:]]+).*/\1/p'
(出力マッチング部分)grep
サポートとPCRE実装を介して:-o
-P
xinput list | grep -Po '2\.4G Composite Devic.*id=\K\d+'