Использование grep для соответствия только группе соответствия в регулярном выражении?

Мне нужно установить раскладку клавиатуры с помощью setxkbmap перед запуском Wine games, поскольку я использую 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 

Мне интересно схватить макет.

2 Solutions collect form web for “Использование grep для соответствия только группе соответствия в регулярном выражении?”

Попробуйте использовать эту команду awk :

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

или используйте команду cut

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

Вы можете использовать -o и немного изменить grep

  -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+'` 

Мы изменили регулярное выражение, чтобы использовать внешний вид, чтобы его не было частью матча

  • grep и sed в конкретных
  • Один лайнер, чтобы увидеть, вернул ли grep что-то?
  • Как фильтровать базовые csv по столбцам
  • Создание шаблона регулярного выражения для grep
  • Использование Grep -o или Sed / Awk для захвата фрагмента из середины строки
  • Выражение Egrep как выражение grep
  • Соответствовать регулярному выражению между разделителями
  • Как распечатать элемент из соответствующего ближайшего следующего столбца после поиска элемента в текущем столбце?
  • Развернуть переменную среды из PIPE (SHELL)
  • Объедините две строки файла и добавьте число в конце строк
  • Как искать строку только в текстовых файлах? (рекурсивно)
  • Linux и Unix - лучшая ОС в мире.