我正在尝试替换以下(以最简单的形式)
{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错误:重复计数无效
答案 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
没有意义,它是空的。)