
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
+
匹配前一組中的一個或多個。
因此,(?<=primary )[x\d]+
基本意味著匹配字元列表x0123456789
(例如1920x1080)出現在文本之後'primary '
。請注意,' '
後面有一個空格字元primary
。只有在你的情況下這樣的配對才會是1920x1080
你可以測試這個正規表示式這裡。
編輯:重要筆記。
(1) 通過Grep
,您可以僅有的使用固定長度的lookbehind。例如echo '012abcde' | grep -oP '(?<=\d{3})\w+'
輸出abcde
但echo '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}'
這對我來說似乎是最簡單的解決方案,我有兩個顯示器並獲得兩個顯示器的輸出。