不认识匹配组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不认识匹配组相关的知识,希望对你有一定的参考价值。

我正在尝试从目录中的所有pdf文件打印出一个子字符串。我似乎无法使用它。正则表达式是正确的,但是当我使用 1时sed会出错

for old in ./*.pdf; do
    new=$(echo $old | sed -e 's/(./)?d+_(ww-d+).+/1/')
    echo $new
done

1,但我使用(GNU但是)4.4

输出是:

sed:-e表达式#1,char 32:`s'命令的RHS上的无效引用 1

对于目录中的每个文件...

谢谢!

答案

你可以用

sed -E 's/(./)?[0-9]+_[A-Z][A-Z]-[0-9]+.+/1/'

请注意,sed不支持PCRE正则表达式,因此,dw只是普通的无效结构。要匹配任何字母,您可以使用[:alpha:] POSIX字符类,或者如果您希望匹配大写字母,请使用[:upper:]

而不是d,使用[0-9][:digit:]

在BRE POSIX模式中,()表示字面括号,这就是为什么你得到一个错误,说你不能引用任何捕获组值 - 模式中没有定义。要使未转义的括号在POSIX BRE模式中创建一个组,您需要转义它们,或者 - 如果您使用POSIX ERE模式(sed-r-E选项),您可以使用它们未转义。

同样适用于+量词:在POSIX BRE模式中它应该转义,在ERE模式中,可以使用它未转义。

此外,您不需要使用第二个捕获组,因为您没有在替换中使用2

以上是关于不认识匹配组的主要内容,如果未能解决你的问题,请参考以下文章

循环通过 python 正则表达式匹配

查看发票组代码后的总结和有感

当 listview 行项目中包含隐藏视图时,片段不尊重匹配父高度

markdown 岩组代码片段

重新创建应用时,片段与底部导航视图图标不匹配

Oracle 数据库 - 使用UEStudio修改dmp文件版本号,解决imp命令恢复的数据库与dmp本地文件版本号不匹配导致的导入失败问题,“ORACLE error 12547”问题处理(代码片段