2014-01-06 2 views
0

일부 길이 코드를 수정하려고합니다. 나는 목록 1의 모든 단어의 단어를 목록 2의 단어 (쌍으로)로 대체하려고합니다.하나의 단어 목록을 찾아서 단어 목록의 다른 단어 목록으로 바꾸십시오.

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

List 2: 
v1 
v2 
v3 
v4 
. 
. 

, 나는 파일 "code.txt에 (등)"V1 "과"Vsap1 * (GF/(Kagf + GF)) "의 모든 인스턴스를 대체 할 싶습니다 ". 나는 텍스트 파일 ("search_for.txt")에 List 1을 가지고있다.

지금까지,이 같은 일을 봤는데 :이 코드에 많은 문제가 있습니다

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 

I하지 테스트 (여기가 없습니다 시스템) 그래서

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

은 미세 조정해야합니다. c erntly ("\"와 첫 번째 sed 패턴에서 자동차의 특수 의미 사이에 \ "로 인해 \"특수 문자가 이스케이프 처리에 관한 게시물이 많이 있습니다)