I'm trying to backreference using the sed command
I am relatively new to shell scripting and sed. I need to substitute a pattern, globably, but I also need to remember (or save) part of the pattern and use it later in the same substitute command. The saved pattern will be variable, so I need to use a wild card. For example,
input message=trt:GetAudioSourcesRequest/>
and I want to end up with something like
input message=trt:GetAudioSourcesRequest PAUL/GetAudioSourcesRequest/>
but the function string GetAudioSourcesRequest
will change (in length also) throughout the file, so I need a wild card, e.g.,
sed -i "s/input message=trt:<wild card in here>/>/input message=trt:<print wild card> PAUL/<print wild card>/>
I have managed to get the following comman开发者_如何学JAVAd to nearly do what I want but it is too rigid. It only stores a 4 syllable pattern so if I have a function name such as GetProfileRequest
, this doesn't work
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'
This outputs
input message="trt:GetAudioSourcesRequest PAUL/GetAudioSourcesRequest"/>
Which is ok, but when I use GetProfileRequest
this doesn't work.
I have come across \W
and [^[:alnum:]]
or [[:alnum:]]
but I don't how to use them.
Thanks in advance.
sed 's|\(input message=trt:\)\([^/]*\)|\1\2 PAUL/\2|'
精彩评论