如何從 xrandr 輸出中僅提取螢幕解析度資訊?
xrandr | grep primary
返回
eDP-1-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
我只對此輸出中的解析度子字元串感興趣。
1920x1080
我該如何提取它?
$ 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}'
只需執行這個,
xrandr | grep -oP '(?<=primary )[x\d]+'
這輸出
1920x1080
那麼,這是如何工作的呢?
(?<=pattern)pattern
1 Positive Lookbehind:檢查是否text
出現在模式之前。
[ ]
字元集。用於將字元列表組合在一起。
\d
一個數字。表示範圍0-9
[x\d]
組\d
和x
在一起。表示數字和 x 的列表。這基本上意味著x0123456789
+
匹配上一個組中的一個或多個。因此,
(?<=primary )[x\d]+
baiscally 意味著匹配出現在 text 之後的字元列表x0123456789
(例如'primary '
1920x1080) 。' '
請注意,後面有一個空格字元primary
。在您的情況下,只有這樣的匹配是1920x1080
你可以在這裡測試這個正則表達式。
**編輯:**重要說明。
(1) 使用
Grep
,您只能使用固定長度的lookbehinds 。例如echo '012abcde' | grep -oP '(?<=\d{3})\w+'
輸出abcde
但echo '012abcde' | grep -oP '(?<=\d+)\w+'
輸出錯誤grep: lookbehind assertion is not fixed length
。因此,對於Grep,Positive Lookbehind的模板不是or。(?<=fixed_length_pattern)pattern``(?<=pattern)pattern``(?<=text)pattern
(2) 根據@G-Man在下面的評論部分中說“恢復莫妮卡”,該選項不符合POSIX。這意味著它可能沒有多少舊設備。雖然,根據我個人的經驗,過去 4 年更新的設備應該可以正常工作。其他設備也可能工作。不能更具體,因為我沒有那麼多設備要測試。
-o``Grep
(3) 再次根據**G-Man**
-P
,當您傳遞啟用 Perl 兼容正則表達式 (PCRE)的參數時,支持 Lookbehind Assertion 。許多較舊的設備可能再次不支持該功能。但再次根據我的經驗,在最近的設備中執行良好。