我写了这个脚本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选项以包含此修改。
请猜猜好吗? :(
答案 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/