OS X'RE错误:重复计数无效'

时间:2018-06-06 21:08:42

标签: regex macos sed

我正在尝试替换以下(以最简单的形式)

{filedir_9}file.jpg

{filedir_7}file.jpg

使用

sed -i -e 's/(\{filedir_9\})([a-z\-\_0-9]+).jpg/\{filedir_7\}$2$3/g'

但我得到了:RE错误:重复计数无效

1 个答案:

答案 0 :(得分:1)

您可以使用

sed -i '' -e 's/{filedir_9}\([-a-z_0-9]\{2,\}\)\.jpg/{filedir_7}\1/g'

请注意\{在POSIX BRE模式中打开限制量词,您需要{来匹配文字{

要以BRE POSIX模式创建捕获组,您需要\(...\),而不是(...),并且在替换内部,您应该使用\1来引用第1组值。

在POSIX模式中,不支持括号表达式中的转义序列,您应该将-放在模式的开头/结尾,转义它不起作用(\被视为文字\ char)。

另外,要匹配一个点,您需要转义模式中的.字符,如果它未转义,则匹配任何字符。

在替换字符串中,您应该使用\1而不是$1(类似Perl的占位符)。请注意,您正在使用第2组和第3组的占位符,而(\{filedir_9\})([a-z\-\_0-9]+).jpg模式仅尝试捕获2个子字符串,因此没有第3组(因此,使用$3\3没有意义,它是空的。)