我正在尝试使用sed命令进行反向引用

时间:2010-05-21 13:46:20

标签: shell

我对shell脚本和sed相对较新。我需要以全局方式替换模式,但我还需要记住(或保存)模式的一部分,然后在相同的替换命令中使用它。保存的模式是可变的,所以我需要使用外卡。例如,

input message=trt:GetAudioSourcesRequest/>

我希望最终得到像

这样的东西
input message=trt:GetAudioSourcesRequest PAUL/GetAudioSourcesRequest/>

但函数字符串GetAudioSourcesRequest在整个文件中也会改变(长度也是如此),所以我需要一张外卡,例如,

sed -i "s/input message=trt:<wild card in here>/>/input message=trt:<print wild card> PAUL/<print wild card>/>

我设法得到以下命令几乎做我想要的但是它太僵硬了。它只存储一个4音节模式,所以如果我有一个函数名称,如GetProfileRequest,这不起作用

echo "input message=\"trt:GetAudioSourcesRequest\"/>" | sed 's/input message=\"trt:\([A-Z][a-z]*\)\([A-Z][a-z]*\)\([A-Z][a-z]*\)\([A-Z][a-z]*\).*/input message=\"trt:\1\2\3\4\ PAUL\/\1\2\3\4"\/\>/g'

此输出

input message="trt:GetAudioSourcesRequest PAUL/GetAudioSourcesRequest"/>

哪个好,但是当我使用GetProfileRequest时,这不起作用。

我遇到\W[^[:alnum:]][[:alnum:]],但我不知道如何使用它们。

提前致谢。

1 个答案:

答案 0 :(得分:0)

sed 's|\(input message=trt:\)\([^/]*\)|\1\2 PAUL/\2|'