xdpyinfo | grep dimensions
的输出是
dimensions: 2560x1600 pixels (676x423 millimeters)
通过sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/')
进行管道确实会提取尺寸(2560x1600
),但不会使用左括号。
如何使用sed获取milimiters(即646x423
)中的尺寸?
答案 0 :(得分:2)
您可以使用
sed -r 's/.*\(([0-9]+x[0-9]+).*/\1/'
查看online demo。
<强>详情
.*
- 尽可能多的0个字符\(
- 文字(
(与-r
一起使用的POSIX ERE风格)([0-9]+x[0-9]+)
- 第1组(后来引用\1
反向引用):1+位,x
,1 +位数.*
- 尽可能多的0个字符请注意,您实际上可以省略^
和$
,因为只有一行与sed
匹配。
这是使用POSIX BRE正则表达式的等效解决方案:
sed 's/.*(\([0-9][0-9]*x[0-9][0-9]*\).*/\1/'
请注意,(
表示POSIX BRE中的文字(
字符,而\(...\)
在此处定义了捕获组。由于POSIX BRE不支持+
量词,因此您可以使用[0-9][0-9]*
代替(1位和0位数)。
答案 1 :(得分:2)
如果您想在单个命令中提取它,那么您只需使用匹配重置正则表达式grep
替换现有的gnu grep
命令\K
:
xdpyinfo | grep -oP 'dimensions:.*\(\K\d+x\d+'
676x423
以上将需要gnu grep
。如果您无法使用此功能,则可以将此grep
管道与另一个grep
一起使用:
xdpyinfo | grep -oE 'dimensions:.*\([0-9]+x[0-9]+' | grep -oE '[0-9]+x[0-9]+$'
如果您必须使用sed
,请使用单个sed命令并减少grep
:
xdpyinfo | sed -nE '/dimensions/{s/.*\(([0-9]+x[0-9]+).*/\1/p;q;}'