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
+
前のグループの 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
。したがって、グレップテンプレートポ肯定的ならookbehind はまたは ではありませ(?<=fixed_length_pattern)pattern
ん。(?<=pattern)pattern
(?<=text)pattern
(2)によると@G-Man は「モニカを復帰させろ」と言う下のコメント欄のオプション-o
はGrep
ない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 つのモニターを持っており、両方に出力を得ています。