Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex OSX';重复错误:重复计数无效&x27;_Regex_Macos_Sed - Fatal编程技术网

Regex OSX';重复错误:重复计数无效&x27;

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模式中,括号表达式中的转义序列不受支持,您应该将-放在模式的开始

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

使用

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

您可以使用

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'