如何從 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

+匹配前一組中的一個或多個。

因此,(?<=primary )[x\d]+基本意味著匹配字元列表x0123456789例如1920x1080)出現在文本之後'primary '。請注意,' '後面有一個空格字元primary。只有在你的情況下這樣的配對才會是1920x1080

你可以測試這個正規表示式這裡

編輯:重要筆記。

(1) 通過Grep,您可以僅有的使用固定長度的lookbehind。例如echo '012abcde' | grep -oP '(?<=\d{3})\w+'輸出abcdeecho '012abcde' | grep -oP '(?<=\d+)\w+'輸出錯誤grep: lookbehind assertion is not fixed length。因此,對於格雷普的模板積極的Lookbehind(?<=fixed_length_pattern)pattern不是(?<=pattern)pattern(?<=text)pattern

(2) 根據@G-Man 說“恢復莫妮卡”在下面的評論部分中,-o選項Grep不是符合 POSIX 標準。這意味著可能沒有很多舊設備。不過,根據我個人的經驗,最近 4 年更新的設備應該可以正常運作。其他設備也可能起作用。無法更具體,因為我沒有那麼多設備要測試。

(3) 再次根據G-曼-P,當您傳遞啟用 Perl 相容正規表示式 (PCRE) 的參數時,支援 Lookbehind Assertion 。許多舊設備可能再次不支援這一點。但根據我的經驗,在最近的設備上效果很好。

答案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什麼都不返回,分辨率位於第三個字段,而不是第四個字段。

答案4

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

這對我來說似乎是最簡單的解決方案,我有兩個顯示器並獲得兩個顯示器的輸出。

相關內容