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 Positive Lookbehind:textパターンの前に表示されることを確認します。

[ ]文字セット。文字リストをグループ化するために使用されます。

\d数字。表現範囲0-9

[x\d]グループ\dx。数字とxのリストを表します。基本的にはこれを意味します。x0123456789

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

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

この正規表現をテストできます。ここ

編集する:重要なメモ。

(1) 合格すればGrepできますただ固定長の裏返しを使用してください。たとえば、echo '012abcde' | grep -oP '(?<=\d{3})\w+'出力はされますが、abcde出力echo '012abcde' | grep -oP '(?<=\d+)\w+'が間違っていますgrep: lookbehind assertion is not fixed length。したがって、grep金型ポジティブエルookbehindはまたはでは(?<=fixed_length_pattern)patternありません。(?<=pattern)pattern(?<=text)pattern

(2) 基準@G-Manは「モニカ復元」と言います。以下のコメントセクションの-oオプションはGrep次のとおりです。いいえPOSIX規格に準拠しています。これは、利用可能な古い機器が多くないことを意味します。しかし、私の個人的な経験によると、最近4年以内に更新されたデバイスは正常に動作します。他のデバイスも動作できます。テストするデバイスがあまりないため、具体的には説明できません。

(3)また元にG-マン-Pは、Perl-Compatible Regular Expression(PCRE)サポートパラメータを渡すときにLookbehind Assertionをサポートします。今回も、多くの古いデバイスがそれをサポートしていない可能性があります。しかし、私の経験によると、最新のデバイスでは素晴らしい動作します。

答え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つのモニターを持っており、両方のモニターから出力を取得します。

関連情報