sed中的反向引用返回错误的值

use*_*491 8 regex macos sed

我正在尝试使用sed替换表达式.正则表达式适用于vim但不适用于sed.我正在用斜线替换数字前的最后一个破折号

/www/file-name-1 
Run Code Online (Sandbox Code Playgroud)

应该回来

/www/file-name/1
Run Code Online (Sandbox Code Playgroud)

我使用以下命令,但它继续输出/ www/file-name/0

sed 's/-[0-9]/\/\0/g' input.txt
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Bir*_*rei 15

您必须在括号中括起数据以便稍后引用它,并sed开始计数1.要恢复匹配的所有字符而不需要括号,则使用&符号.

sed 's/-\([0-9]\)/\/\1/g' input.txt
Run Code Online (Sandbox Code Playgroud)

产量:

/www/file-name/1
Run Code Online (Sandbox Code Playgroud)


Chr*_*our 5

您需要使用括号捕获才能返回引用(从a开始\1).试试sed -r 's|(.*)-|\1/|':

$ sed -r 's|(.*)-|\1/|' <<< "/www/file-name-1" 
/www/file-name/1
Run Code Online (Sandbox Code Playgroud)

您可以使用任何分隔符,sed因此/在替换包含时不是最佳选择/.该-r选项用于扩展正则表达式,因此不需要对括号进行转义.