Regex OSX';重复错误:重复计数无效&x27;
我试图替换以下内容(以最简单的形式) 与 使用 但我得到:RE错误:无效重复计数您可以使用Regex OSX';重复错误:重复计数无效&x27;,regex,macos,sed,Regex,Macos,Sed,我试图替换以下内容(以最简单的形式) 与 使用 但我得到:RE错误:无效重复计数您可以使用 sed -i '' -e 's/{filedir_9}\([-a-z_0-9]\{2,\}\)\.jpg/{filedir_7}\1/g' 注意,\{在POSIX BRE模式中打开一个限制量词,您需要{来匹配文本{ 要在BRE POSIX模式中创建捕获组,您需要\(…\),而不是(…),并且在替换中,您应该使用\1引用组1的值 在POSIX模式中,括号表达式中的转义序列不受支持,您应该将-放在模式的开始
sed -i '' -e 's/{filedir_9}\([-a-z_0-9]\{2,\}\)\.jpg/{filedir_7}\1/g'
注意,\{
在POSIX BRE模式中打开一个限制量词,您需要{
来匹配文本{
要在BRE POSIX模式中创建捕获组,您需要\(…\)
,而不是(…)
,并且在替换中,您应该使用\1
引用组1的值
在POSIX模式中,括号表达式中的转义序列不受支持,您应该将-
放在模式的开始/结束处,转义不起作用(将\
视为文本\
字符)
此外,要匹配点,您需要转义模式中的
字符,如果它未转义,则它匹配任何字符
在替换字符串中,您应该使用
\1
而不是$1
(类似Perl的占位符)。请注意,您正在使用占位符来组2和组3,而(\{filedir\u 9\})([a-z\-\\\\ u 0-9]+)。jpg
模式只尝试捕获2个子字符串,因此没有组3(因此,使用$3
或\3
没有意义,它是空的)。尝试sed-i'-e's/{filedir\u 9}\([-a-z\u 0-9]\{2,\}\\\\\.jpg/{filedir 7}\1/g'
。如果您试图捕获两个子模式,为什么要使用组3占位符?请注意,{
在POSIX BRE模式中打开一个限制量词,您需要{
匹配文字{
。要创建捕获组,您需要\(…\)
,而不是(…)
在替换中,您应该使用\1
引用组1的值。在POSIX模式中,括号表达式中的转义序列不受支持,您应该将-
放在模式的开头/结尾,转义不起作用。谢谢,这有助于获得我需要的内容。我发布了一个带有更多解释的答案ons.太棒了!有一个问题,第二个参数是什么?@wot,它是空备份的占位符。如果需要创建备份,请将'
替换为.bak
。请参阅。
{filedir_7}file.jpg
sed -i -e 's/(\{filedir_9\})([a-z\-\_0-9]+).jpg/\{filedir_7\}$2$3/g'
sed -i '' -e 's/{filedir_9}\([-a-z_0-9]\{2,\}\)\.jpg/{filedir_7}\1/g'