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)pattern
1 Положительный ретроспективный анализ: проверьте, text
появляется ли перед шаблоном.
[ ]
Набор символов. Используется для группировки списка символов.
\d
Цифра. Означает диапазон0-9
[x\d]
Группы \d
и x
вместе. Означает список цифр и x. Что означает в основном этоx0123456789
+
Соответствует одному или нескольким элементам предыдущей группы.
Итак, (?<=primary )[x\d]+
по сути означает соответствие списку символов x0123456789
(например1920x1080), который появляется после текста . Обратите внимание, что после 'primary '
стоит пробел . И только такое совпадение в вашем случае будет' '
primary
1920x1080
Вы можете проверить это регулярное выражениездесь.
Редактировать:Важные заметки.
(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}'
Мне это показалось самым простым решением: у меня два монитора, и я получаю вывод на оба.