bash awk "Mouse"という単語を含む項目を除外する方法

bash awk

次の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-TPILITEK 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 KLookbehindアサーションを使用して、より短い代替方法で一致開始(ept)をリセットします。周りを見てくださいそして正規表現で\ Kをサポート
\d+ 数字(0~9)(1回以上(最大限多く一致))

おすすめ記事