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]グループ\dx一緒。数字とxのリストを意味します。基本的にこれを意味しますx0123456789

+前のグループの 1 つ以上に一致します。

つまり、(?<=primary )[x\d]+基本的には文字のリストに一致することを意味しますx0123456789例えば1920x1080)がテキストの後に表示されます。の後に'primary 'スペース文字があることに注意してください。そして、あなたのケースでは、そのような一致は' 'primary1920x1080

この正規表現をテストすることができますここ

編集:重要な注意事項。

(1) を使用するとGrepのみ固定長の後読みを使用します。たとえば、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 は「モニカを復帰させろ」と言う下のコメント欄のオプション-oGrepないPOSIX 準拠。つまり、古いデバイスでは動作しない可能性があります。ただし、私の個人的な経験では、過去 4 年間に更新されたデバイスは正常に動作するはずです。他のデバイスでも動作する可能性があります。テストするデバイスがそれほど多くないため、これ以上詳しくはわかりません。

(3)また、Gマン後読みアサーションは、Perl 互換正規表現 (PCRE) を有効にするパラメータを渡すとサポートされます-P。これも、多くの古いデバイスではサポートされていない可能性があります。しかし、私の経験では、最近のデバイスでは問題なく動作します。

答え3

この特定のケースでは、次のコードを 2 回使用できます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何も返されず、解像度は 4 番目のフィールドではなく 3 番目のフィールドにあります。

答え4

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

これは私にとって最も簡単な解決策のように思えました。私は 2 つのモニターを持っており、両方に出力を得ています。

関連情報