regex - 如何使用 sed 提取以 '(' 开头的模式

标签 regex sed pattern-matching

xdpyinfo | grep dimensions的输出是

  dimensions:    2560x1600 pixels (676x423 millimeters)

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

如何使用 sed 获取以毫米为单位的尺寸(即 646x423 )?

最佳答案

您可以使用

sed -r 's/.*\(([0-9]+x[0-9]+).*/\1/'

查看online demo .

详细信息

  • .* - 任意 0+ 尽可能多的字符
  • \( - 文字 ( (在 POSIX ERE 风格中,您与 -r 一起使用)
  • ([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+ 位数字)。

关于regex - 如何使用 sed 提取以 '(' 开头的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45445381/

相关文章:

scala - 为什么我需要使用 andThen 来匹配 Futures?

c++ - 确保用户输入的日期是 (MM/YY)

javascript - 如何在js中使用正则表达式获取子字符串

Linux bash脚本逐行删除部分字符串

sed - 使用 sed 删除目录中多个文件的某些文本

c++ - 命令行实用程序可以比 C++ 更快吗?

performance - Scala 模式匹配性能

regex - 在实时验证中使用正则表达式

regex - 替换给定 unicode 字符串中的所有表情符号

java - 包含在 1 之间的 0 的任何非空连续序列的正则表达式