2017-03-22 113 views
0

改變特定位置的字符我有我想以編程方式改變設置不同的參數文件:如何使用shell變量

$ cat ex.dat 
line 1 
here's another line 
this is the number I want to change --> 1e-11 
more lines 

我想改變1e-11的價值觀5.1020.。類似這樣的:

mkd() 
{ 
    mkdir $1; 
    cd $1 
} 
for j in 1 2 3 4 5 ; do 
    mkd WS$j 
    cp ../ex.dat . 
    sed -ie '3s/1e-11/${j}./' ex.dat 
    cd .. 
done 

我的方法不起作用。我如何將1e-11替換爲$j的值?

$ cat WS3/ex.dat 
line 1 
here's another line 
this is the number I want to change --> ${j}. 
more lines 
+0

你是什麼意思*「不工作」*?解釋具體行爲對其他人有幫助...... –

+3

_Double-quote_'sed'腳本確保'$ {j}'被shell擴展。 '-ie'也會創建一個後綴爲'e'的備份文件,也許你打算使用'-i -e',或者簡單地使用'-i'。另外,一般情況下雙引號所有shell變量引用,以防止不必要的修改。 – mklement0

回答

1

您可以使用雙引號在你的sed和$ J鍵擴展$ {}Ĵ沒有大括號應該點之前工作得很好。

sed -ie "3s/1e-11/$j./" ex.dat 
2

嘗試:

sed -ie '3s/1e-11/'"${j}"'./' ex.dat 

內單引號的外殼不被其值替換變量。