首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用sed提取以'(‘)开头的模式

如何用sed提取以'(‘)开头的模式
EN

Stack Overflow用户
提问于 2017-08-01 18:38:50
回答 2查看 152关注 0票数 2

xdpyinfo | grep dimensions的输出是

代码语言:javascript
复制
  dimensions:    2560x1600 pixels (676x423 millimeters)

通过sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/')进行管道传输确实提取了以像素为单位的维度(2560x1600),但不适用于开括号。

如何用sed获得毫米波(即646x423)的尺寸?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-01 19:12:35

如果要在单个命令中解压缩它,则可以使用match reset regex (即grep )替换现有的gnu grep命令。

代码语言:javascript
复制
xdpyinfo | grep -oP 'dimensions:.*\(\K\d+x\d+'

676x423

以上将需要gnu grep。如果这是不可用的,那么您可以使用这个grep与另一个grep

代码语言:javascript
复制
xdpyinfo | grep -oE 'dimensions:.*\([0-9]+x[0-9]+' | grep -oE '[0-9]+x[0-9]+$'

如果您必须使用sed,那么只需使用一个sed命令,就可以减少grep

代码语言:javascript
复制
xdpyinfo | sed -nE '/dimensions/{s/.*\(([0-9]+x[0-9]+).*/\1/p;q;}'
票数 1
EN

Stack Overflow用户

发布于 2017-08-01 18:40:57

你可以用

代码语言:javascript
复制
sed -r 's/.*\(([0-9]+x[0-9]+).*/\1/'

看一个在线演示

详细信息

  • .* --尽可能多地使用0+字符
  • \( -一个文字( (在-r中使用的POSIX版本)
  • ([0-9]+x[0-9]+) -第1组(稍后使用\1反向引用):1+位数、x、1+digits
  • .* --尽可能多地使用0+字符

注意,您实际上可以在这里省略^$,因为sed有一个完整的行匹配。

下面是使用POSIX BRE正则表达式的等效解决方案:

代码语言:javascript
复制
sed 's/.*(\([0-9][0-9]*x[0-9][0-9]*\).*/\1/'

注意,(表示POSIX中的文字(字符,\(...\)在这里定义一个捕获组。由于POSIX不支持+量词,所以可以只使用[0-9][0-9]* (1位数和0+位数)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45445381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档