2010-05-21 52 views
0

我對shell腳本和sed比較新。我需要循環替換一個模式,但我也需要記住(或保存)部分模式,並稍後在相同的替換命令中使用它。保存的模式將是可變的,所以我需要使用通配符。例如,我試圖使用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
sed 's|\(input message=trt:\)\([^/]*\)|\1\2 PAUL/\2|' 
+0

它似乎沒有工作。我的完整命令, echo「input message = \」trt:GetAudioSourcesRequest \「/>」| sed's | \(input message = trt:\)\([^ /] * \)| \ 1 \ 2 PAUL/\ 2 |' 輸出 輸入消息=「TRT:GetAudioSourcesRequest」 /> 我不認爲它執行的sed – Paul 2010-05-21 15:50:51

+1

哦,我發現我的問題。我錯過了一個雙引號。 謝謝 – Paul 2010-05-21 15:54:31