次のbashコマンドは、名前にILITEK ILITEK-TPを含むすべてのデバイスのxinput IDを収集します。
name='ILITEK ILITEK-TP'
ids=$(xinput --list |awk -Fid= "/$name/"'{print $2+0}')
このスクリプトは機能します。ただし、ILITEK ILITEK-TP Mouse
このID番号のリストから同様の項目を除外したいと思います。現在ILITEK ILITEK-TP
とILITEK ILITEK-TP Mouse
アイテムが収集されますids
。
答え1
何かの目的を指します。
awk -Fid= "/$name/"'{print $2+0}'
よくある間違いです。
以下を行う必要があります。
awk -F'id=' -v name="$name" '$0 ~ name{print $2+0}'
しかし、ここで使用する方が良いですgrep
。
name='ILITEK ILITEK-TP'
xinput --list | grep -oP "${name}.*?id=\K\d+"
正規表現の一致は次のとおりです。
節 | 説明する |
---|---|
${name} |
変数名 |
.*? |
\nを除くすべての文字(0回以上(できるだけ少なく一致)) |
id= |
'ID=' |
\K |
K Lookbehindアサーションを使用して、より短い代替方法で一致開始(ept)をリセットします。周りを見てくださいそして正規表現で\ Kをサポート |
\d+ |
数字(0~9)(1回以上(最大限多く一致)) |
答え2
以下を試すことができますgrep
。
xinput --list |grep 'ILITEK ILITEK-TP'|grep -v 'ILITEK ILITEK-TP Mouse'
答え3
awk にはブール値があります。したがって、いくつかの調整が可能でなければなりません。
name='ILITEK ILITEK-TP'
ids=$(xinput --list |awk -Fid= "/$name/"' && !/Mouse/{print $2+0}')
これが役に立たない場合は、xinput --list出力のいくつかのサンプルラインを提供してください。
(引用文が間違っているようで修正しました。)