2014-01-06 230 views
0

我試圖修改一些長度代碼。我想用列表2中的單詞(成對)替換列表1中所有單詞中的單詞。查找並替換「單詞」的另一個列表中的單詞列表中的單詞「csh」

List 1: 
Vsap1*(GF/(Kagf+GF)) 
kdap1*AP1 
vsprb 
kpc1*pRB*E2F 
. 
. 

List 2: 
v1 
v2 
v3 
v4 
. 
. 

換句話說,我想它與 「V1」,以取代 「Vsap1 *(GF /(Kagf + GF))」 的所有實例(等)在文件「code.txt 」。我有一個文本文件中的列表1(「search_for.txt」)。

到目前爲止,我一直在做這樣的事情:

set search_for=`cat search_for.txt` 
set vv=1 

foreach reaction $search_for 
sed -i s/$reaction/$vv/g code.txt 
set vv=$vv+1 
end 

存在諸多問題與此代碼。首先,它看起來代碼無法用括號處理表達式(關於「正則表達式」的東西?)。其次,我不確定我的櫃檯是否正常工作。第三,我甚至沒有整合替換列表 - 我認爲用1,2,3代替會更容易。理想情況下,我想用v1,v3,v3替換...

任何幫助將不勝感激!我主要在Matlab中工作(在這種情況下很難處理字符串等),所以我在csh上沒那麼棒。

最佳, 邁赫迪

+0

您能提供期望輸出嗎? – BMW

回答

0

AWK應該會更好,我認爲

set search_for=`cat search_for.txt` 
set vindex=1 

foreach reaction ${search_for} 
    ReactionEscaped="`printf \"%s\" \"${reaction}\" | sed 's²[\+*./[]²\\\\&²g'`" 
    sed -i "s/${ReactionEscaped}/v${vindex}/g code.txt 
    let vindex+=1 
end 

我沒有測試(可在這裏沒有系統),因此

ReactionEscaped = 「printf \"%s\" \"${reaction}\" | sed 's²[\+*./[]²\\\\&²g'\

必須進行微調c當然(由於「之間的雙」\「,以及第一sed模式的汽車的特殊含義)[在網站上有很多關於逃脫特殊字符模式的帖子)

相關問題