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

wot*_*wot 3 regex macos sed

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

{filedir_9}file.jpg
Run Code Online (Sandbox Code Playgroud)

{filedir_7}file.jpg
Run Code Online (Sandbox Code Playgroud)

使用

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

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

Wik*_*żew 6

您可以使用

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

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

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

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

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

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