我正在尝试使用 sed 替换表达式。正则表达式在 vim 中有效,但在 sed 中无效。我用斜杠替换数字前的最后一个破折号,所以
/www/file-name-1
应该返回
/www/file-name/1
我正在使用以下命令,但它一直输出 /www/file-name/0
sed 's/-[0-9]/\/\0/g' input.txt
我究竟做错了什么?
您必须将数据括在括号之间以便稍后引用它,并sed
从 1 开始计数。要恢复所有匹配的字符而不需要括号,使用&
符号。
sed 's/-\([0-9]\)/\/\1/g' input.txt
这会产生:
/www/file-name/1
您需要先使用括号进行捕获,然后才能反向引用(以 a 开头\1
)。尝试sed -r 's|(.*)-|\1/|'
:
$ sed -r 's|(.*)-|\1/|' <<< "/www/file-name-1"
/www/file-name/1
您可以使用任何分隔符,sed
因此/
当替换包含/
. 该-r
选项适用于扩展正则表达式,因此不需要转义括号。
OS X 下的 sed 似乎从 1 开始计算反向引用。尝试\1
而不是\0