我正在尝试使用sed替换表达式。正则表达式适用于vim但不适用于sed。我正在用斜线替换数字前面的最后一个破折号,所以
/www/file-name-1
应该返回
/www/file-name/1
我正在使用以下命令,但它不断输出/ www / file-name / 0
sed 's/-[0-9]/\/\0/g' input.txt
我做错了什么?
答案 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