次の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回以上(最大限多く一致)) |