我正在尝试替换以下内容(以最简单的形式)
{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 错误:无效的重复计数
您可以使用
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,它是空的)。
| 归档时间: |
|
| 查看次数: |
6849 次 |
| 最近记录: |