bash错误sed:-e表达式#1,char 3:未知命令:`/'

时间:2013-07-09 16:14:16

标签: bash for-loop sed

我写了这个脚本bash,必须写一个特殊行不同的文件 数字(即:“9.0E-8”......)所以我必须在for循环之后使用最后一个文件  “9.0E-11”尊重“9.0E-7”。

#!/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-cycle,因为当它尝试替换AGAIN时,其他的字符串为whit(“9.0E”) -9“等......)脚本找不到最后一个!

首先用于步骤)9e-7 - > 9e-8:脚本找到9e-7并替换为n = 9e-8 第二步骤)9e-8 - > 9e-9:脚本找不到9e-8字符串而无法更改!!!

所以我必须重写for选项以包含此修改。

请猜猜好吗? :(

2 个答案:

答案 0 :(得分:2)

错误在这里:

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

由于您未在21之后提供任何sed命令。

您是否忘记了sed命令中的s(替换开关)?

应该是:

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

OR可能是这样的:

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

答案 1 :(得分:2)

sed命令的语法是

[ address(es) ] command

21被解释为地址,即行号。因此/被视为命令,因此错误。

你想做什么?如果要在第21行上将$ 9.0替换为$ n,请使用

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