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:]]
但我不知道如何使用它們。
在此先感謝。
它似乎沒有工作。我的完整命令, echo「input message = \」trt:GetAudioSourcesRequest \「/>」| sed's | \(input message = trt:\)\([^ /] * \)| \ 1 \ 2 PAUL/\ 2 |' 輸出 輸入消息=「TRT:GetAudioSourcesRequest」 /> 我不認爲它執行的sed – Paul 2010-05-21 15:50:51
哦,我發現我的問題。我錯過了一個雙引號。 謝謝 – Paul 2010-05-21 15:54:31