Regex 如何使用sed提取以';(';
Regex 如何使用sed提取以';(';,regex,sed,pattern-matching,Regex,Sed,Pattern Matching,xdpyinfo | grep维度的输出为 dimensions: 2560x1600 pixels (676x423 millimeters) 通过管道将其通过sed-r/^[^0-9]*([0-9]+x[0-9]+).$/\1/')确实提取了以像素为单位的尺寸(2560x1600),但不能使用左括号 如何使用sed以毫米为单位获取尺寸(即646x423),您可以使用 sed -r 's/.*\(([0-9]+x[0-9]+).*/\1/' 看一看 详细信息 *-尽可能多的任意
xdpyinfo | grep维度的输出为
dimensions: 2560x1600 pixels (676x423 millimeters)
通过管道将其通过sed-r/^[^0-9]*([0-9]+x[0-9]+).$/\1/')
确实提取了以像素为单位的尺寸(2560x1600
),但不能使用左括号
如何使用sed以毫米为单位获取尺寸(即646x423
),您可以使用
sed -r 's/.*\(([0-9]+x[0-9]+).*/\1/'
看一看
详细信息
-尽可能多的任意0个字符*
-a literal\(
(在POSIX中,您使用的是(
)-r
-第1组(后面用([0-9]+x[0-9]+)
反向参考提及):1+位,\1
,1+位x
-尽可能多的任意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位以上).如果您想在单个命令中提取它,那么您可以使用match reset regex将现有的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]+$'
xdpyinfo | sed -nE '/dimensions/{s/.*\(([0-9]+x[0-9]+).*/\1/p;q;}'
如果必须使用sed
,则使用单个sed命令如下,并减少grep
:
xdpyinfo | grep -oE 'dimensions:.*\([0-9]+x[0-9]+' | grep -oE '[0-9]+x[0-9]+$'
xdpyinfo | sed -nE '/dimensions/{s/.*\(([0-9]+x[0-9]+).*/\1/p;q;}'
没有安装
ggrep
,但是第二个选项没有输出任何内容。对于sed
,我建议使用xdpyinfo | sed-nE'/dimensions/{s/*\([0-9]+x[0-9]+)./\1/p;q;}“
和cut-downgrep
现在你的问题更完整了,针对的是完整的问题。出于好奇,你将如何用这种格式提取像素模式(2560x1600)中的维度?xdpyinfo | sed-nE'/dimensions/{s/*([0-9]+x[0-9]+)./\1/p;q;}'
应该适用于这一点。用反斜杠转义括号。