어딘가에 간단한 답변이 있을 것 같은데, 찾을 수가 없어서 여기에 질문드립니다.
.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+'