grep을 사용하여 정규 표현식에서 일치하는 그룹만 일치시키시겠습니까?

grep을 사용하여 정규 표현식에서 일치하는 그룹만 일치시키시겠습니까?

setxkbmap나는 모든 게임의 컨트롤을 망가뜨리는 타이핑에 Dvorak을 사용하기 때문에 와인 게임을 시작하기 전에 키보드 레이아웃을 설정 해야 합니다 . 내가 원하는 것은 게임을 시작하기 전에 현재 키보드 레이아웃을 가져와 변수에 저장한 다음 게임이 끝난 후 복원하는 스크립트를 작성하는 것입니다.

ORIGINAL_LAYOUT=`setxkbmap -query | grep -P 'layout\:\s{5}(\w+)'`
setxkbmap us
wine ...
setxkbmap $ORIGINAL_LAYOUT

내가 겪고 있는 문제는 grep이 내 캡처 그룹뿐만 아니라 전체 줄과 일치한다는 것입니다. 일치하는 캡처 그룹을 간단히 덤프할 수 있는 방법이 있나요?

예를 들어, 출력은 다음과 setxkbmap -query같습니다:

rules:      evdev
model:      pc105
layout:     dvorak

레이아웃을 잡는 데 관심이 있습니다.

답변1

grep을 사용 -o하고 약간 변경할 수 있습니다

   -o, --only-matching
          Print  only the matched (non-empty) parts of a matching line, with each such
          part on a separate output line.

.

ORIGINAL_LAYOUT=`setxkbmap -query | grep -oP '(?<=layout\:\s{5})\w+'`

Lookbehind를 사용하도록 정규식을 변경했으므로 일치 항목이 아닙니다.

답변2

다음 명령을 사용해 보십시오 awk:

setxkbmap -query | grep layout | awk '{print $2}'

또는 cut명령을 사용하십시오

setxkbmap -query | grep layout | cut -d : -f2

관련 정보