前置正则表达式匹配

时间:2009-08-30 15:33:42

标签: linux bash

我在bash脚本中得到了一个我需要替换的变量。该行中唯一的常量是它将以“_(* x)xxxp.mov”结尾。其中x是数字,可以是3或4的长度。例如,我知道如何替换值,但只有它是常量:

echo 'whiteout-tlr1_1080p.mov' | sed 's/_[0-9]*[0-9][0-9][0-9]p.mov/_h1080p.mov/g'

如何将正则表达式匹配结转到替换线?

编辑:

好的,我刚刚得知grep只能打印匹配才能更好地做这样的事情吗?

urltrail=$(echo $@ | grep -o [0-9]*[0-9][0-9][0-9]p.mov)
newurl=$(sed 's/$urltrail/h$urltrail/g')

嗯,尝试了以上但是我还是挂了。

2 个答案:

答案 0 :(得分:1)

Back Reference

sed 's/_\([0-9]*[0-9][0-9][0-9]\)p.mov/_h\1p.mov/g'

后引用\n,其中n是一个数字,匹配先前由正则表达式的n带括号的子表达式匹配的子字符串。

答案 1 :(得分:0)

你没有将旧路径输入sed,所以sed正在等待输入。

newurl=$(echo $@ |sed 's/$urltrail/h$urltrail/g')