我对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:]]
,但我不知道如何使用它们。
提前致谢。
答案 0 :(得分:0)
sed 's|\(input message=trt:\)\([^/]*\)|\1\2 PAUL/\2|'