Как извлечь из вывода xrandr только информацию о разрешении экрана?

Как извлечь из вывода xrandr только информацию о разрешении экрана?
xrandr | grep primary

возвращаться

eDP-1-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 193mm

Меня интересует толькоподстрока разрешения 1920x1080из этого вывода.

Как мне его извлечь?

решение1

$ echo 'eDP-1-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 193mm' |
awk -F'[ +]' '{print $4}'
1920x1080

Кстати, при использовании awk grep вам не нужен, вот все, что вам нужно:

xrandr | awk -F'[ +]' '/primary/{print $4}'

решение2

Просто запустите это,

xrandr | grep -oP '(?<=primary )[x\d]+'

Это выводит1920x1080

Итак, как это работает?

(?<=pattern)pattern1 Положительный ретроспективный анализ: проверьте, textпоявляется ли перед шаблоном.

[ ]Набор символов. Используется для группировки списка символов.

\dЦифра. Означает диапазон0-9

[x\d]Группы \dи xвместе. Означает список цифр и x. Что означает в основном этоx0123456789

+Соответствует одному или нескольким элементам предыдущей группы.

Итак, (?<=primary )[x\d]+по сути означает соответствие списку символов x0123456789(например1920x1080), который появляется после текста . Обратите внимание, что после 'primary 'стоит пробел . И только такое совпадение в вашем случае будет' 'primary1920x1080

Вы можете проверить это регулярное выражениездесь.

Редактировать:Важные заметки.

(1) С помощью Grepвы можетеТОЛЬКОиспользовать фиксированную длину lookbehinds. Например, echo '012abcde' | grep -oP '(?<=\d{3})\w+'выводит abcdeно echo '012abcde' | grep -oP '(?<=\d+)\w+'выводит ошибку grep: lookbehind assertion is not fixed length. Таким образом, дляГрепшаблонппозитивныйЛookbehind (?<=fixed_length_pattern)patternне является (?<=pattern)patternили (?<=text)pattern.

(2) Согласно@G-Man говорит: «Восстановите Монику»в разделе комментариев ниже , опция -oвGrepНЕТСовместимость с POSIX. Это означает, что может не быть многих старых устройств. Хотя, по моему личному опыту, устройства, обновленные за последние 4 года, должны работать нормально. Другие устройства тоже могут работать. Не могу сказать точнее, так как у меня не так много устройств для тестирования.

(3) Опять же согласноG-Man, Lookbehind Assertion поддерживается, когда вы передаете параметр -P, который включает Perl-совместимое регулярное выражение (PCRE). Которое, опять же, может не поддерживаться во многих старых устройствах. Но, опять же, по моему опыту, отлично работает в последних устройствах.

решение3

В этом конкретном случае вы можете использовать cutдважды:

$ echo 'eDP-1-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 193mm' | cut -d ' ' -f4 | cut -d+ -f1
1920x1080

Обратите внимание, что такой парсинг xrandrвывода довольно хрупкий. Например, в моей системе xrandr | grep primaryничего не возвращается, а разрешение находится в 3-м поле, а не в 4-м.

решение4

xrandr | grep '*' | awk '{print $1}'

Мне это показалось самым простым решением: у меня два монитора, и я получаю вывод на оба.

Связанный контент