You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取不同引号间的字符串?scanimage设备地址提取的正则困惑

从scanimage输出提取设备地址的grep命令转义方案

场景说明

scanimage -L 命令的输出示例:

device `canon_dr:libusb:003:004' is a CANON DR-C125 scanner

需要提取其中的设备地址 canon_dr:libusb:003:004。

原命令的问题与解决

你尝试的命令grep -Po '\K[^']+'`存在单引号转义问题,以下是两种正确写法:

写法一:单引号包裹正则,转义内部单引号

scanimage -L | grep -Po '`\K[^'\''']+'

在单引号包裹的字符串中,要表示单引号需用'\'':先关闭当前单引号,用\'输出单引号,再重新打开单引号继续写正则。

写法二:双引号包裹正则

scanimage -L | grep -Po "`\K[^']+"

双引号内的单引号无需转义,这里的反引号作为正则匹配的普通字符,不会触发shell的命令替换(无变量或命令嵌套场景),可以直接使用。

正则逻辑说明

  • \K:Perl正则特性,忽略之前匹配的反引号内容,只返回后面匹配的部分
  • [^']+:匹配所有非单引号的字符,直到遇到下一个单引号为止,正好提取出设备地址

内容的提问来源于stack exchange,提问作者Ilyasha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:28:20