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

时间:2013-03-03 17:32:36

标签: regex macos sed

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

/www/file-name-1 

应该返回

/www/file-name/1

我正在使用以下命令,但它不断输出/ www / file-name / 0

sed 's/-[0-9]/\/\0/g' input.txt

我做错了什么?

3 个答案:

答案 0 :(得分:15)

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

sed 's/-\([0-9]\)/\/\1/g' input.txt

产量:

/www/file-name/1

答案 1 :(得分:5)

您需要先使用括号进行捕获,然后才能返回引用(启动\1。试试sed -r 's|(.*)-|\1/|'

$ sed -r 's|(.*)-|\1/|' <<< "/www/file-name-1" 
/www/file-name/1

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

答案 2 :(得分:0)

似乎在OS X下开始计算后向引用数为1.尝试\1代替\0