2017-04-20 34 views
0

我有一個包含一個文件:替換串的端上多行同值從陣列

asd x  
sometihng else  
asd x  
sometihng else  
asd x 

和包含values=(3,4,5)陣列。 現在我想用shell腳本中的第一個元素的值替換文件第一行的「x」。對於所有行/元素。讓我得到

asd 3 
sometihng else 
asd 4 
sometihng else 
asd 5 

我應該怎麼做?

截至目前,我曾嘗試在循環中使用sed。事情是這樣的:

values=(3 4 5) 
lines=3 
for currentLine in $(seq $lines) 
do 
    currentElement=$(expr "$currentLine"/"2") 
    sed "$currentLine s/\(asd\)\(.*\)/\1 ${values[$currentElement]}/" 
done 

但是,每運行循環我得到有趣行的所有原始文件編輯,像這樣:

asd 3 
sometihng else  
asd x  
sometihng else  
asd x 

asd x 
sometihng else  
asd 4  
sometihng else  
asd x 

asd x 
sometihng else  
asd x  
sometihng else  
asd 5 

謝謝,亞歷克斯

+1

謝謝!我會添加我嘗試過的所以你可以看到我在哪裏。 –

+0

您需要使用'sed -i'(請參閱[portable use](https://stackoverflow.com/documentation/sed/3640/in-place-editing/12529/portable-use#t=201704200917386643334))各種版本),以便進行更改並將其寫回文件 – Sundeep

+0

每節或第一節的第一行? –

回答

0

這將是易於使用awk

awk 'BEGIN { a[1]=3; a[2]=4; a[3]=5; } /x/ { count++; sub(/x/, a[count]); } { print }' 

如果你堅持sed然而,你可以嘗試這樣的事情:

{ echo "3 4 5"; cat some_file; } | \ 
    sed '1{h;d};/x/{G;s/x\(.*\)\n\([0-9]\).*/\1\2/;x;s/^[0-9] //;x}'