2013-07-09 286 views
1

我已經編寫了這個腳本bash,它必須寫一個具有不同特定行數的文件 數字(即:「9.0E-8 「...)所以我必須有最後一個文件,在for循環之後, 」9.0E-11「尊重」9.0E-7「。bash error sed:-e表達式#1,字符3:未知命令:`/'

#!/bin/sh 

touch IC_masslessPlanetesimal.java 

for n in "9.0E-8" "9.0E-8" "9.0E-9" "9.0E-10" "9.0E-11" 
do 
sed -i "21s/9\.0E-7/$n/" IC_masslessPlanetesimal.java 
javac IC_masslessPlanetesimal.java 
java IC_masslessPlanetesimal 
done 

現在腳本必須重新編輯,編譯和運行file.java並且代碼運行時沒有錯誤。 現在的問題是: 當我在第21行查看file.java(scrpt必須更改的編號)時,scrpt僅編輯第一個for循環,因爲當它試圖替換AGAIN時,string whit其他一個(「9.0E-9」等)腳本無法找到最後一個!步驟9e-7→9e-8:腳本找到9e-7並替換爲n = 9e-8 秒)步驟9e-8→9e-9:腳本不找到9e-8字符串,不能改變它!

所以我必須重寫包含此修改的選項。

有什麼猜想嗎? :(

+1

它看起來謊言yopu're試圖改變21行文件IC_masslessPlanetesimal.java 5次循環,第一個9.0E-7 ,然後到9.0E-8等等。這絕對沒有意義,儘管如此,請告訴我們你想要做什麼以及一些示例輸入和預期輸出。 –

+0

@ Ed Morton這是bash的第一部分,所以每次我改變我編譯的文件,運行它,讀一個程序並獲取一個輸出。 –

+0

bash腳本被解釋,而不是編譯。重點在於,儘管我們無法理解您目前爲止所提供的描述中所做的工作,但發佈示例輸入和預期輸出是幫助我們理解您的目標所需完成的最低要求。 –

回答

2

的語法sed命令是

[ address(es) ] command 

21被解釋爲地址,即行號。因此/被視爲命令,因此是錯誤。

你想做什麼?如果你想在第21行替換由$ N 9.0e7,使用

21s/9\.0E7/$n/ 
+0

這是解決方案!謝謝 ! –

2

錯誤是在這裏:

sed -i "21/9.0E7/$n" 

因爲我們還沒有21後提供的任何sed命令

你忘了s(替代開關)在你的sed命令

?它應該是:

sed -i "s/9.0E7/$n/" 

OR may是這樣的:

sed -i "21s/9.0E7/$n/" 
+0

不,這不是錯誤,因爲當我把's'我recive跟隨錯誤消息'sed:-e表達式#1,字符18:未終止的''命令'。 21是我必須更改「9.0e-7」的字符串「n」的字符串 –

+0

現在你的sed命令是什麼? – anubhava

+0

我懷疑你現在可能在你的sed命令中有一些語法錯誤。 – anubhava

相關問題