我正在尝试使用以下命令在bash脚本中为我的主监视器提取分辨率:
system_profiler SPDisplaysDataType
它给了我输出:
Displays:
Color LCD:
Display Type: LCD
Resolution: 1440 x 900
Pixel Depth: 32-Bit Color (ARGB8888)
Mirror: Off
Online: Yes
Built-In: Yes
PLL2410W:
Resolution: 1920 x 1080 @ 60 Hz
Pixel Depth: 32-Bit Color (ARGB8888)
Main Display: Yes
Mirror: Off
Online: Yes
Rotation: Supported
我想获得值为Main Display: Yes
的显示的分辨率值。我以为我可以使用ggrep进行预测,但我有一些错误:
ggrep -P '(?<=Resolution:\s)[\w\d\s\@]+(?=[\n\w\d:]Main\sDisplay\:\sYes)
Blergh,抱歉看起来很正常。任何建议都会很棒。
谢谢!
答案 0 :(得分:2)
它不起作用,因为模式与每一行匹配,而不是与整个“文件”匹配。
您可以将整个“文件”加载到内存中,这是以下-0777
的结果:
perl -0777nE'say $1 if /Resolution: (.*)(\n {6}.*)*\n {6}Main Display: Yes/'
(这是编码的,如果“分辨率”和“主显示”的顺序被交换,它将不会打印任何内容而不是打印错误的值。换句话说,它安全地失败。)
(如果您需要支持5.8或更早版本,请使用-e
代替-E
和print "$1\n"
代替say $1
。)
答案 1 :(得分:1)
使用awk:
awk -F' *: *' '/Resolution/{p=$2; next} /Main Display: Yes/{print p; exit}'
1920 x 1080 @ 60 Hz
答案 2 :(得分:1)
这是否适合您的需要?
system_profiler SPDisplaysDataType | grep -B3 "Main Display: Yes" | grep "Resolution" | awk -F"Resolution:" '{print $2}'
给出:1920 x 1200 @ 60 Hz(在我的电脑上)
希望这有帮助
答案 3 :(得分:0)
您可以将grep
的{{1}}选项与-B
一起使用,以获得您想要的行:
head
如果“分辨率”行不是“主要显示”行之前的两行,这显然会中断,但对您来说可能不是问题。如果是,那么您应该考虑将输出解析为适当的树结构。