bash awk "Mouse"라는 단어가 포함된 항목을 제외하는 방법

bash awk "Mouse"라는 단어가 포함된 항목을 제외하는 방법

다음 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회 이상(최대한 많이 일치))

답변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 출력의 몇 가지 예제 라인을 제공하십시오.

(인용문이 잘못된 것 같아 수정했습니다.)

관련 정보