我正在尝试替换以下代码(以最简单的形式)
{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错误:无效的重复计数
发布于 2018-06-08 03:22:52
您可以使用
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_9\})([a-z\-\_0-9]+).jpg
模式仅尝试捕获2个子字符串,因此没有组3(因此,没有使用$3
或\3
的点,它是空的)。
https://stackoverflow.com/questions/50729640
复制相似问题