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